Django Migrations,Django通过Migrations命令将Model中的任何修改写入到数据库中,例如增加新模型、修改已有字段等。
makemigrations
作用:根据model的变化生成对应的python代码,该代码用于更新数据库。
语法:
django-admin makemigrations [app_label [app_label ...]]
如果没有填写任何参数,Django会检查所有应用程序中的模型并生成python脚本,脚本存放在每个应用下面一个名为migrations的文件夹下,脚本名字类似0001_initial.py格式。
示例如图所示。
migrate
作用:将model的修改应用到数据库。
语法:
django-admin migrate [app_label] [migration_name]
如果执行migrate命令时没有给出任何参数,Django会将系统中所有应用程序模型的更改部署到数据库。
如果执行migrate命令时指定了应用程序名,Django仅将指定的应用程序的模型修改部署到数据库。注意如果该应用程序的模型与其他应用程序模型之间存在关联,那么其他关联的应用程序模型的修改也可能被部署到数据库。
如果执行migrate命令时同时给出了应用程序名和migration名字,系统将会把数据库恢复到一个以前的版本。
所有migration信息保存在django_migrations数据表中,django_migrations表内容如图所示。
例如最后一次migrate操作(003_test)为blog应用程序创建了一个test数据表,此时执行下面代码将会撤销最后一次操作(0002_auto_20171221_1726是003_test的前一次操作):
python manage.py migrate blog 0002_auto_20171221_1726
如果想撤销所有数据库更改,使用zero代替migrationname。
可选参数:
--fake
对于高级用户,仅仅想设置当前的migration状态,并不需要真正去更新数据库,或者已经手动更新了数据库,此时可以使用fake参数。
python manage.py migrate blog --fake
--database DATABASE
将模型更改应用到指定的数据库,默认情况会更新到settings.py里面的default数据库。
sqlmigrate
作用:输出某一个migrate对应的SQL语句。
语法:
django-admin sqlmigrate app_label migration_name
示例:打印出初始化的SQL脚本,如图所示。
showmigrations
作用:显示migrations记录。
语法:django-admin showmigrations [app_label [app_label ...]]
可以通过--list
或者--plan
参数设置显示格式。--list
按照应用程序显示migration记录,该参数缩写为-l,--plan
显示所有记录,缩写为-p。如果某一次migration已经被部署到数据库中了,在该记录前就会显示[X]
,否则显示[ ]
,如图所示。
酷客教程相关文章:
评论前必须登录!
注册