south 命令学习
概述
在django某个版本之前,django自身提供一个创建数据库的命令-syncdb,它会根据model来创建相应的表,但是这个命令不好的地方在于,如果想要对model进行更改字段,那么只能在数据库中把改model对应的表给删除掉,然后再次执行命令来创建数据库。但是,south的出现解决了这个问题,它有点像是版本控制,每次更改model,他都会创建一条记录数据,每次执行命令时就会从始至终的跑遍之前创建的所有的纪录,south的迁移记录会全部都存在migreagation
south用法
在新的项目中如果要使用到south的话,需要在django项目中的配置文件的INSTALLED_APPS位置加上south,但是如果你使用的是最新版本的话,那么south已经封装到django项目中了,也就不用加入south。
./manage.py migrate myapp # 第一步将app下的model都创建数据库表;
./manage.py schemamigration myapp --initial # 如果你是第一次执行命令,执行时south会自动初始化,并且创建相应记录信息;
./manage.py schemamigration myapp --auto # 非第一次执行命令,自动创建相应的记录信息;
./manage.py schemamigration myapp --auto --update # 修改最新的记录信息,而不是重新创建一条记录信息;
./manage.py migrate --fake # 欺骗命令migration已经都执行完毕,但其实并没有执行;
之前在工作中发现测试服的migration和本地代码的model各种不一致,明明本地model的代码中是存在某个字段的,但是migration却把该字段给删除了,所以部署的时候怎么执行migrate都会报错,所以最后的做法是不得不直接操作数据库,而且需要把可能会报错的字段等全部都直接操作完数据库才能够重新执行migrate。不过慎用这种直接操作数据库的方法,还是尽量的去避免不一致的情况(虽然我还不知道);
参考: