官术网_书友最值得收藏!

4.18 遷移

Django通過遷移命令將Model中的任何修改寫入到數(shù)據(jù)庫中,例如增加新模型、修改已有模型字段等。

4.18.1 makemigrations

作用:根據(jù)模型的變化生成對應的遷移代碼,該代碼用于更新數(shù)據(jù)庫。

語法:django-admin makemigrations [app_label [app_label ...]]

如果沒有填寫任何參數(shù),Django會檢查所有應用程序中的模型并生成遷移腳本,腳本存放在每個應用下面一個叫作migrations的文件夾下,腳本名字類似0001_initial.py格式。

示例1:為一個應用程序生成遷移。輸入命令,如下圖所示。

示例2:生成一個空遷移,高級開發(fā)人員可以在空遷移中編寫代碼。輸入命令,如下圖所示。

示例3:生成一個帶名稱的遷移。輸入命令,如下圖所示。

4.18.2 migrate

作用:將模型的最新狀態(tài)部署到數(shù)據(jù)庫。

語法:django-admin migrate [app_label] [migration_name]

如果執(zhí)行migrate命令時沒有給出任何參數(shù),Django會將系統(tǒng)中所有應用程序模型的更改部署到數(shù)據(jù)庫。

如果執(zhí)行migrate命令時指定了應用程序名,Django僅將指定的應用程序的模型修改部署到數(shù)據(jù)庫。注意,如果該應用程序的模型與其他應用程序模型之間存在關聯(lián),那么其他關聯(lián)的應用程序模型的修改也可能被部署到數(shù)據(jù)庫。

如果執(zhí)行migrate命令的同時給出了應用程序名和migration名字,系統(tǒng)將會把數(shù)據(jù)庫恢復到一個該遷移前的版本,該操作常用于回滾錯誤的數(shù)據(jù)庫變更。

為測試回滾操作,在polls\models.py中新建一個模型,并使用migrate命令將其應用到數(shù)據(jù)庫中。

模型代碼如下:

所有migration信息保存在django_migrations數(shù)據(jù)表中,下圖是一段時間內發(fā)生的數(shù)據(jù)遷移操作。

其中,最后一行(0005_rolback)就是前面用于生成測試模型的遷移記錄,此時執(zhí)行下面代碼將會撤銷本次遷移(0004_empty是0005_rolback的前一次操作):

    python manage.py migrate polls 0004_empty

輸入命令,如下圖所示。

刷新數(shù)據(jù)庫,可以看到0005_rolback已經(jīng)被刪除了。

如果想撤銷所有數(shù)據(jù)庫更改,可以使用zero代替migrationname。

其他可選參數(shù)如下。

--fake:對于高級用戶,僅僅想設置當前的migration狀態(tài),并不需要真正去更新數(shù)據(jù)庫,例如已經(jīng)手工更新過數(shù)據(jù)庫,此時可以使用fake參數(shù)。

    python manage.py migrate polls --fake

--database DATABASE:將模型更改應用到指定的數(shù)據(jù)庫,默認情況會更新到settings.py里面的default數(shù)據(jù)庫。

4.18.3 sqlmigrate

作用:輸出某一個migrate對應的SQL語句。

語法:django-admin sqlmigrate app_label migration_name

示例:打印出初始化的SQL腳本。輸入命令,如下圖所示。

4.18.4 showmigrations

作用:顯示migrations記錄。

語法:django-admin showmigrations [app_label [app_label ...]]

可以通過--list或者--plan參數(shù)設置顯示格式。--list按照應用程序顯示migration記錄,該參數(shù)縮寫為-l,--plan顯示所有記錄,縮寫為-p。如果某一次migration已經(jīng)被部署到數(shù)據(jù)庫中,在該記錄前就會顯示[X],否則顯示[ ]。

示例:輸入命令,如下圖所示。

主站蜘蛛池模板: 丰县| 张家口市| 昔阳县| 辽中县| 崇仁县| 景德镇市| 长汀县| 常州市| 泰州市| 曲阳县| 崇文区| 连南| 永登县| 密山市| 平阳县| 临西县| 凭祥市| 长子县| 富民县| 丰宁| 开封县| 聂拉木县| 镇平县| 黄骅市| 泌阳县| 叶城县| 衡东县| 丹凤县| 盐边县| 高唐县| 东方市| 陆良县| 九龙县| 台东市| 辽宁省| 筠连县| 南郑县| 榆树市| 多伦县| 长治县| 潼关县|