Django面試題系列(1)——migrate錯誤處理

如果想要深入學習Django,可以看下這個視頻教程:超詳細講解Django打造大型企業官網

面試題1:migrate怎麼判斷哪些遷移腳本需要執行:

他會將代碼中的遷移腳本和數據庫中django_migrations中的遷移腳本進行對比,如果發現數據庫中,沒有這個遷移腳本,那麼就會執行這個遷移腳本。

面試題2:migrate做了什麼事情:

  1. 將相關的遷移腳本翻譯成SQL語句,在數據庫中執行這個SQL語句。
  2. 如果這個SQL語句執行沒有問題,那麼就會將這個遷移腳本的名字記錄到django_migrations中。

面試題3:執行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. 可以做其他的映射了。

如果想要深入學習Django,可以看下這個視頻教程:超詳細講解Django打造大型企業官網

發佈了124 篇原創文章 · 獲贊 75 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章