如果想要深入學習Django,可以看下這個視頻教程:超詳細講解Django打造大型企業官網
面試題1:migrate怎麼判斷哪些遷移腳本需要執行:
他會將代碼中的遷移腳本和數據庫中django_migrations
中的遷移腳本進行對比,如果發現數據庫中,沒有這個遷移腳本,那麼就會執行這個遷移腳本。
面試題2:migrate做了什麼事情:
- 將相關的遷移腳本翻譯成SQL語句,在數據庫中執行這個SQL語句。
- 如果這個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. 可以做其他的映射了。