解決Django makemigrations 時的NodeNotFoundError及其它遷移問題


解決Django makemigrations 時的NodeNotFoundError 及 其它遷移問題

migrate命令執行時Django會做4件事:
1、遷移判定,將你的項目中所有未遷移的變動文件進行遷移(django會去查詢django_migrations表判斷你是否有新的遷移變動),在完成接下來的遷移后,便會在該表中生成一條遷移記錄。
2、遷移映射關系 django_contenttype表新增映射關系(app與模型關系)
3、遷移權限 auth_permission表新增權限
4、執行遷移,生成數據表,或變動

migrate --fake 只執行第一步,並生成遷移記錄。

migrate --fake-initial 執行前三步,不實際變動數據庫

migrate 全部依次執行所有步驟。

當django 環境變了時,原其他環境下的項目不能正常運行,需要進行修改。

常見問題有:

1、首先需要修改url 的方法

2、當執行數據遷移命令時會發生報錯,具體報錯信息如下:

# 我只截取了最近的報錯內容
Traceback (most recent call last):
  File "D:\Python368x64\Lib\site-packages\django\db\migrations\graph.py", line 195, in <listcomp>
    [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)]
  File "D:\Python368x64\Lib\site-packages\django\db\migrations\graph.py", line 58, in raise_error
    raise NodeNotFoundError(self.error_message, self.key, origin=self.origin)
django.db.migrations.exceptions.NodeNotFoundError: Migration auth.0012_user_following dependencies reference nonexistent parent node ('account', '0002_contact')  

此時新建項目時,執行數據庫遷移命令時,可能也會出現該類似問題,這是django的migrations殘留了歷史對應的遷移數據,這個是 django自身的App造成的,如:admin和 auth應用。因此需要根據報錯信息,手動去操作 migrations文件中清除對應的遷移數據文件。

注意:如果提示數據庫中有表已存在,可以首先將數據庫的表遷移出來再進行刪除,或者嘗試使用命令:
python3 manage.py migrate --fake

可以嘗試以下具體操作如下:

1、通過本地的python3.8文件下查詢路徑進行刪除:

image-20200715012932032

2、刪除確定出錯的遷移文件,在這里就是最后一個0012開頭的文件。

3、刪除之后重新執行 python3 manage.py makemigrations

4、執行 python3 manage.py migrate

此時遷移操作應該可以正常了。

注:也可以通過pycharm項目下的庫進行查找進行刪除,路徑同上。很方便查找以及操作。

如果出現其他關於數據遷移問題,也可以通過暴力刪除方式解決(當然不要刪數據庫中的數據)。

具體操作如下:

1、首先刪除項目中的 migrations.py 文件中的記錄

2、去Python庫中,刪除admin應用和 auth應用下的migrations歷史數據

#具體路徑:
python3.6--->site-packages--->django--->contrib--->admin(和auth)-->migrations

3、重新執行數據庫遷移命令,此方法應該可以解決大部分數據庫遷移問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM