程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

在django項目中,對於遷移文件時no migrations to apply一種不是解決的解決方法

編輯:Python

問題描述:

在實際項目開發過程中,難免會因為對於之前寫的model.py文件的模型類不滿意,甚至是有些地方需要修改,此時往往由於復雜的表關系,導致修改後的模型類再進行重新遷移時會出現各種各樣的錯誤,例如NO migrations to apply就是其中的一種。然而在通過網絡的求助,有的建議

執行python3 manage.py makemigrations --empty 你的應用名;
執行python3 manage.py makemigrations;
執行python3 manage.py migrate;

原文鏈接為https://www.cnblogs.com/li1992/p/10648390.html但是本人測試後發現,對於我的問題沒有解決。
以及還有這種解決方法的,

刪除該app名字下的migrations文件。
進入數據庫,找到django_migrations的表,刪除該app名字的所有記錄。
delete from django_migrations;
python manage.py makemigrations
python manage.py migrate

不過說實話這種方式我沒有試過,原文鏈接為https://www.cnblogs.com/mensiler/p/9455387.html但是實際上就是刪除遷移文件的過程,和第一個效果一樣。

不是解決的解決方案:

因為後面花了很長時間在這裡,就嘗試繞過去,一種方法是直接在可視化數據庫中(我用的是navicat)直接創建自己需要的表及其字段約束;二是將原有的表全部刪除,再重新遷移,但是借助navicat可以方便快捷的將數據和表關系導出導入,在navicat中將該app下的表結構和數據導出,相當於備份,然後將這些表都刪掉,建議在服務器中使用drop table ‘表名’ 來刪掉,因為在navicat中關系約束無法刪除,盡管我已經刪除了約束,可能是這個軟件的問題。注意,在重新進行遷移前,要先將原來服務端的app下的migrations中的原有的遷移文件刪掉,**(不要刪掉__init__.py,當然誤刪掉的話,本地的再重新上傳一下就回來了)**然後重新遷移

python manage.py makemigrations
python manage.py migrate

此時因為已經將原來的app下的表刪掉的緣故,不會報其他錯誤,例如筆者在沒有刪掉表的時候遇到的django.db.utils.InternalError: (1050, “Table ‘tb_hotnews’ already exists”),以及即便創建了新表,但是外鍵約束丟失情況。
接下來,通過重新創建好全部的App下的表都是空表,然後再將原來刪除舊表時導出的數據和結構文件重新導入到這些新表中就完成了。

總結:

這確實不算是解決辦法,同時不只應用於出現no migrations to apply的方法,基本上出現各種錯誤都可以這麼做,但是確實是在短時間找不出解決方案的最便捷方法,在時間和效率至上,在刪表損失不大時,推薦這麼做,如果各位有真正的解決方法,歡迎討論。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved