常見問題處理 - migrate檔案遷移錯誤
阿新 • • 發佈:2021-11-03
處理1:當執行 pythonmanage.pymakemigrations 出現如下遷移錯誤時的處理方法
對應中文:
您試圖新增一個沒有預設值的非空欄位'des';我們不能這樣做(資料庫需要填充現有行)
請選擇如下方案:
- 現在提供一次性預設值(將對所有現有行設定此列的空值)。
- 退出,在models.py中新增一個預設值。
錯誤原因:
- 當對模型類新新增一個欄位時可出現該錯誤
- 原理是 新增新欄位後,資料庫不知道原來已有資料對於新建欄位該如何賦值,所以新增欄位時,務必要新增default預設值。
處理方法:
- 選擇1 則會進入shell中,手動輸入一個預設值。
- 但是當你選擇了1,添加了預設值,在models.py裡不會有體現。
- 選擇2 退出當前生成遷移檔案的過程,自己去修改models.py,新增加一個'default=xxx'的預設值(推薦使用)
處理2:資料庫的遷移檔案混亂的解決方法
- 資料庫中django_migrations表記錄了migrate的'全過程',專案各應用中的migrate檔案應與之對應,否則migrate會報錯
- 檢視django_migrations表可以看到所有增刪改查記錄:
select * from django_migrations\G;
在多人合作一個專案的時候,可能會遇到我的記錄已經是005了,另一個人的可能才003。理論上來說,migrations檔案裡的遷移檔案是不讓提交的,但是往往新手會遇到這樣的問題,意外地提交上去了。比如我更新到了別人的migrations檔案,和我原來的檔案不一樣,跟我本地測試庫裡的執行記錄就更對不上了。可能我更完別人的我的migrations檔案裡就只剩0001了,但是我本地的資料庫裡面都執行到0005了,很顯然這完全對不上。
最終解決辦法就是未來大家都不要提交自己的migrations資料夾裡的檔案,每個人的遷移檔案自己留著。但是如果已經遇到這種檔案怎麼辦:
- 解決方案:
- 1、刪除 所有migrations裡所有的000?_XXXX.py ( __ init __ .py除外)
- 2、刪除 資料庫
- mysql>drop database mywebdb;
- 3、重新建立 資料庫
- mysql>create databases mywebdb default charset ...;
- 4、重新生成migrations裡所有的000?_XXXX.py
- pythonmanage.pymakemigrations
- pythonmanage.pymakemigrations
- 5、重新更新資料庫
- pythonmanage.pymigrate