快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

【转载】解决django models文件修改后的数据库同步问题——south模块

请联系QQ:1793040 索取软件

在使用django进行开发时,往往需要根据不同的需求对model进行更改。而这时候,python manage.py syncdb就不好使了。

目前有个很好的工具,是south,这个是专门用来更改model的。官方的文档见http://south.readthedocs.org/en/latest/index.html。 里面有详述的文档,包括安装和使用。

安装很简单easy_install 可以。

然后在你的setting.py 里面的app_install 里添加 ‘south’。

然后就可以使用命令 python manage.py schemamigration app–initial 这个是在你更改model之前做的初始化,有了这个版本后,你就可以随便对app里的model进行更改了。更改结束后,运行python manage.py schemamigration app–auto然后使用python manage.py migrate app 就可以了。

problems:

1。如果添加一个字段,south需要你给这个字段添加一个默认直,以供之前已经存在的记录作为默认值。但是,如果这个字段是unique的话,怎么设置默认值就都不行了。这个时候可能需要你直接对数据库的表进行操作,删除所有已经存在的记录,然后设置默认值。另一个方法是,先不设定unique,添加字段,然后通过网站的后台更改已经存在的记录的这个字段为不同值,然后再设定其为unique。后者是我的想法,没有实践过,提供一种思路。

2。有时可能需要对某些字段添加自己的解析规则。因为有些custom字段是Cannotfreeze field 的,需要自己写规则,

比如该类:在core.fields.thumbs.py 中的类ImageWithThumbsField




而我在core.models.py中用到了这个类,我可以在core.models.py的开头加入这个:
from south.modelsinspector import add_introspection_rules from core.fields.thumbs import ImageWithThumbsField add_introspection_rules( [ ( (ImageWithThumbsField, ), [], { "verbose_name": ["verbose_name", {"default": None}], "name": ["name", {"default": None}], "width_field": ["width_field", {"default": None}], "height_field": ["height_field", {"default": None}], "sizes": ["sizes", {"default": None}], }, ), ], ["^core.fields.ImageWithThumbsField",])
即可。更多的关于怎么自己写rule,可以参考:

http://south.readthedocs.org/en/latest/customfields.html#extending-introspection

http://stackoverflow.com/questions/4715964/django-south-introspection-rule-doesnt-work

3如果在使用

https://www.cnblogs.com/shiqiaosheng/p/manage.py migrate myapp 的时候,如果出现某些表已经存在的错误(
django-south-table-already-exists
),可以这样:
https://www.cnblogs.com/shiqiaosheng/p/manage.py migrate myapp--fake 参数
参数可以是上面schemamigration 命令返回的版本。
参考:
http://stackoverflow.com/questions/3090648/django-south-table-already-exists 
http://stackoverflow.com/questions/10769644/django-south-adding-new-field-but-databaseerror-occurs-table-already-exists 
目前我是遇到了这些错误,为大家总结一下。

能够对model进行更改了,我们就可以进行的开源的项目中遨游啦。哈哈。

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1793040