Django Migrations

Django Migrations,Django通过Migrations命令将Model中的任何修改写入到数据库中,例如增加新模型、修改已有字段等。

makemigrations

作用:根据model的变化生成对应的python代码,该代码用于更新数据库。
语法:

django-admin makemigrations [app_label [app_label ...]]

如果没有填写任何参数,Django会检查所有应用程序中的模型并生成python脚本,脚本存放在每个应用下面一个名为migrations的文件夹下,脚本名字类似0001_initial.py格式。
示例如图所示。
Django Migrations

migrate

作用:将model的修改应用到数据库。
语法:

django-admin migrate [app_label] [migration_name]

如果执行migrate命令时没有给出任何参数,Django会将系统中所有应用程序模型的更改部署到数据库。

如果执行migrate命令时指定了应用程序名,Django仅将指定的应用程序的模型修改部署到数据库。注意如果该应用程序的模型与其他应用程序模型之间存在关联,那么其他关联的应用程序模型的修改也可能被部署到数据库。

如果执行migrate命令时同时给出了应用程序名和migration名字,系统将会把数据库恢复到一个以前的版本。

所有migration信息保存在django_migrations数据表中,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脚本,如图所示。
Django Migrations

showmigrations

作用:显示migrations记录。

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

可以通过--list或者--plan参数设置显示格式。--list按照应用程序显示migration记录,该参数缩写为-l,--plan显示所有记录,缩写为-p。如果某一次migration已经被部署到数据库中了,在该记录前就会显示[X],否则显示[ ],如图所示。
Django Migrations

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!