django1.8数据迁移

django 从1.7版本开始起增加了一个新的数据迁移功能,在之前如果你数据models文件做了修改,需要手动修改数据库来做数据同步,如果是线上的库,操作风险就比较高了,当然在1.6版本前也有第三方的数据迁移工具,例如south,在1.7版本前大家用这个做数据迁移的比较多,但现在从1.7版本开始就自带数据迁移功能了,因为django1.8是官方永久性支持版本,所以本篇我们是在1.8环境下的操作,如果还用老版本的兄弟,建议尽快切换新版本,因为老版本都官方都不在支持了,所以数据迁移功能对老版本用户来说,这个功能算是比较新的功能,所以有想用django1.8开发的朋友,就要了解数据迁移功能如何使用了,我们今天就来看看如何使用该功能,首先建立我们的models文件,假设我们的models.py文件内容如下:

这是一个典型的博客文章model,有了这个model,我们如何让数据库也建立相应的表呢,之前的用syncdb,但现在我们就要用migrate, 另外需要注意的是sysdb这个命令在1.9版本就没有了。

首先我们生成迁移脚本,运行:

python manage.py mkaemigrations

注:因为我之前已经同步一次数据库,所以为了看明白,我是注释了最后的pulished_date(在这行前加#号)

如果你是第一次运行,看到的内容可能给我不一样。

运行完后会生成内容如下:

Migrations for ‘blog':
0003_remove_post_published_date.py:
– Remove field published_date from post

运维完后并数据库并没有发生变化,只是生成了要操作数据库的一些脚本文件,感兴趣的可以去migrations目录里查看。

接下来运行:

python manage.py migrate

输出:

Synchronizing apps without migrations:
Creating tables…
Running deferred SQL…
Installing custom SQL…
Running migrations:
Rendering model states… DONE
Applying blog.0003_remove_post_published_date… OK

看到已经将published_date这个字段移除了,这个例子是展示的修改,如果你是第一次运行,原理也是一样,就更简单了,有了migrate,以后model的的任何改变,例如增加,删除,修改,都先makemigrations, 然后migrate二步就完成了与数据库的同步,就是这么简单。

郑重说明:以上都是在测试环境运行的结果,请千万不要在自己线上环境进行操作。