Django-South使用
South是针对Django提供的syncdb同步models和数据库不中而开发的数据迁移工具,可以做为syncdb的替代工具。South能够将Model类的更改同步到数据库中,免去了以前只能手工同步Model与数据表的辛苦。
基本应用
安装完成后,需要在项目中使用South。即在INSTALL_APPS中加入south应用
首次使用South如下:
python manage.py schemagration youapp --install
#--install 会在数据库中创建models中定义的数据表和suth需要的South_migrationhistory表,会在你的youapp目录下创建一个migration子目录
python manage.py schemamigration youapp --auto #检查对models的更改
python manage.py migrate youapp #将更改两步到数据表中
迁移到South
对于已经存在的项目(定义了models,创建了相应的数据表对象,保存了数据),这时想要使用South替代原来的syncdb需要如下步骤:
- INSTALL_APPS中加入south应用
- 运行如下代码:
python manage.py syncdb #syncdb是将south_migrationhistory表写入数据库 python manage.py convert_to_south youapp #在youapp目录下创建migrations目录及迁移所需
常见问题
1. 添加和删除字段时可能会要求输入 default value(django里面models里面的许多字段默认都是null=False)
对于添加字段,输入的默认值必须和models定义的类型匹配,否则同步数据库的时候会报错
对于删除字段的情况,可以随意输入一个value而不管字段的默认类型,可以实现删除,但是并不可取,具体原因可以参见South的实现机制(rollback到删除字段之前会失败)。
2. 杀手锏
如果South在同步数据库的过程中出现错误,则migrations目录下面对应此次更改的python文件不会被执行,可以运行python manage.py migrate --list查看没有执行的py文件,文件名前面没有*表示该文件对应的更改没有反应到数据库,只需删除掉这些有问题的migrate,参照错误提示修改 models再同步即可,也可以直接更改对应的py文件修复错误