django 資料庫遷移(migrate)
首先資料庫遷移的兩大命令:
python manage.py makemigrations & python manage.py migrate
前者是將model層轉為遷移檔案migration,後者將新版本的遷移檔案執行,更新資料庫。
這兩中命令呼叫預設為全域性,即對所有最新更改的model或遷移檔案進行操作。如果想對部分app進行操作,就要在其後追加app name:
$ python manage.py makemigrations app_name
$ python manage.py migrate app_name
如果想要精確到某個遷移檔案(0004_xxx.py):
$ python manage.py migrate app_name 0004
如果想看遷移檔案的執行狀態,可以用showmigrations命令檢視:
$ python manage.py showmigrations
admin
[X] 0001_initial
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
顯示django已知的migrations和狀態。
錯誤
資料庫的命令稍有不慎可能就會掉坑。特別是migrate命令,由於django的資料庫中包含了migrations的記錄,如果migrations檔案丟失,很可能造成migrate失敗。所以有必要將migrations檔案加入版本控制,保證開發時的migrations記錄和檔案相匹配。
如果migrate出現了失敗,很可能是因為migration檔案包含的變更資訊由於當前資料庫的約束無法完完成。這時就應該去資料中找到這些記錄或鍵的位置,刪掉重做即可。一般這些資料存在的表為:外來鍵約束對應的表、auth_permission、django_content_type和django_migrations.