- Django 3.0入門與實踐
- 李健編著
- 928字
- 2021-03-27 00:17:44
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],否則顯示[ ]。
示例:輸入命令,如下圖所示。

- Learning Single:page Web Application Development
- ASP.NET Core Essentials
- Internet of Things with Intel Galileo
- Mastering ServiceNow(Second Edition)
- Java Web程序設計任務教程
- Python算法指南:程序員經(jīng)典算法分析與實現(xiàn)
- The Professional ScrumMaster’s Handbook
- C/C++數(shù)據(jù)結構與算法速學速用大辭典
- Canvas Cookbook
- Developing SSRS Reports for Dynamics AX
- 響應式Web設計:HTML5和CSS3實戰(zhàn)(第2版)
- Java EE企業(yè)級應用開發(fā)教程(Spring+Spring MVC+MyBatis)
- ASP.NET Web API Security Essentials
- Android編程權威指南(第4版)
- Getting Started with hapi.js