django mysql数据同步_django model改变后,同步数据库

在使用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

fromdjango.db.modelsimportImageField

classImageWithThumbsField(ImageField):

def__init__(self,verbose_name=None,name=None,width_field=None,height_field=None,sizes=None,**kwargs):self.verbose_name=verbose_nameself.name=nameself.width_field=width_fieldself.height_field=height_fieldself.sizes=sizessuper(ImageField,self).__init__(**kwargs)

而我在core.models.py中用到了这个类,我可以在core.models.py的开头加入这个:

fromsouth.modelsinspectorimportadd_introspection_rulesfromcore.fields.thumbsimportImageWithThumbsFieldadd_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,可以参考:

3如果在使用

./manage.py migrate myapp 的时候,如果出现某些表已经存在的错误(

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值