django 執行migrate命令的時候報錯的解決辦法


原因:
  執行migrate命令會報錯的原因是:數據庫的'django_migrations'表中的遷移版本記錄和代碼中的遷移腳本不一致的。
解決方法:
  使用--fake參數
  首先對比數據庫中的遷移腳本和代碼中的遷移腳本。然后找到哪個不同,之后再使用'--fake',將代碼中的遷移腳本添加到'django_migrations'數據庫中,但是並不會執行sql語句。這樣就可以避免每次執行'migrate'的時候,都執行一些重復的遷移腳本。
終極解決方案:
  如果代碼中的遷移腳本和數據庫中的遷移腳本實在太多,就是搞不清了。那么這時候就可以使用終極解決方案:
  1、終極解決方案的原理:將之前的那些遷移腳本都不用了,重新來過。將出問題的app下的所有模型和數據庫中表保持一致,重新映射。
  2、將出問題的app下的所有模型,都和數據庫中的表保持一致。
  3、將出問題的app下的所有遷移腳本文件都刪除,再將'django_migrations'表中將出問題的app相關的遷移記錄都刪掉。
  4、使用'makemigrations',重新將模型生成一個遷移腳本。
  5、使用'migrate --fake-initial'參數,將剛剛生成的遷移腳本,標記為已經完成(因為這些模型相對應的表,其實都已經在數據庫中存在了,不需要重復執行了)
  6、可以做其他的映射了。


補充:
migrate怎么判斷哪些遷移腳本需要執行:
  他會將代碼中的遷移腳本和數據庫中'django_migrations'中的遷移腳本進行對比,如果發現數據庫中,沒有這個遷移腳本,那么就會執行這個遷移腳本。
migrate做了什么事情:
  1、將相關的遷移腳本翻譯成sql語句,在數據庫中執行這個sql語句。
  2、如果這個sql語句執行沒有問題,那么就會將這個遷移腳本的名字記錄到'django_migrations'中。


免責聲明!

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



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