我目前正在使用Django演进来管理我的产品的数据库演进。它并不完美,但我学会了忍受它的缺陷。例如,在移出一个新的模式之前,我总是必须将我的生产数据库复制到测试中,因为" evolve“命令并不总是演化一个在几次小迁移中更改过的数据库(在测试中,我执行了A->B->C,但A->C不会正确地演化。)
南方会解决所有这些问题吗?学习一个新工具的努力值得吗?
发布于 2009-10-19 21:12:45
我刚开始使用South,我100%相信它。它也是为数不多的仍在积极开发中的产品之一。
South应该能够很好地处理你上面描述的问题。对于数据库的每次更改,它都会创建一个包含两个方法“向前”和“向后”的文件。下面是一个自动生成的迁移示例:
# > manage.py schemamigration issuetracker added-status-field --auto
# 0004_added-status-field.py
class Migration:
def forwards(self, orm):
# Adding field 'Issue.status'
db.add_column('issuetracker_issue', 'status', orm['issuetracker.issue:status'])
def backwards(self, orm):
# Deleting field 'Issue.status'
db.delete_column('issuetracker_issue', 'status')关于它的几个好的方面...
你需要进行一些自定义操作,比如将一列中的数据复制到另一列中,因为迁移文件只是manage.py migrate [appname] --fake
manage.py convert_ to _south [appname]
manage.py schemamigration [appname] [description] --auto
抓取
我想我应该为我在开始使用South时所犯的错误添加一些提示。并不是所有的事情都是100%直观的。
migrate --fake,否则South会认为它已过时。--initial标志1.)保存模型更改
2.)运行schemamigration --auto
3.)运行migrate以实际提交对数据库的更改
南方编辑--为了澄清下面的评论,核心贡献者正式投票决定不将包含在版本1.2中。这在一定程度上是因为南方的作者要求尚未将其包括在内。尽管如此,还是有很多对South的社区支持,一些可重用的应用程序制造商开始在他们的应用程序中包含South迁移。
编辑#2 --我做了一些更新,以反映来自当前主干版本的新manage.py命令结构。根据您所做的工作,"startmigration“分为"schemamigration”和"datamigration“。
https://stackoverflow.com/questions/1590944
复制相似问题