目前使用 Django “Evolution”,“South”是不是更好,值得切换?

Posted

技术标签:

【中文标题】目前使用 Django “Evolution”,“South”是不是更好,值得切换?【英文标题】:Currently using Django "Evolution", is "South" better and worth switching?目前使用 Django “Evolution”,“South”是否更好,值得切换? 【发布时间】:2010-12-08 03:17:02 【问题描述】:

我目前正在使用 Django 进化来管理我的产品的数据库进化。它并不完美,但我已经学会忍受它的缺陷。例如,在移出新模式之前,我总是必须复制我的生产数据库进行测试,因为“evolve”命令不能总是演化在几次小型迁移中更改的数据库(在测试中我做了 A->B->C,但 A->C 不会正确进化。)

South 会解决所有这些问题吗?学习新工具值得付出努力吗?

【问题讨论】:

我也很想听听其他人对这些天推荐的 Django 迁移工具的意见。这里有一个类似的问题:***.com/questions/426378/… 但那是几个月前的事了,现在看来 Migrator 已经死了 【参考方案1】:

我刚开始使用 South,我 100% 都在使用它。它也是少数仍在积极开发中的产品之一。

South 应该能够正确处理您在上面描述的问题。对于数据库的每次更改,它都会创建一个具有 2 种方法“向前”和“向后”的文件。这是一个自动生成的迁移示例:

# > 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')

关于它的一些好处....

South 允许您回滚到特定迁移 # 如果您愿意的话

如果您的生产站点在迁移 0002 并且您的 SVN 提交在 0004,South 将执行 0003 然后 0004 以使生产数据库加速。

如果您自己进行了更改,则可以告诉 South 运行“假”迁移。通常,迁移系统会很麻烦,但这使得灵活控制数据库变得非常容易。

manage.py migrate [appname] --fake

如果您需要进行一些自定义操作,例如将一列中的数据复制到另一列,因为迁移文件只是 python 文件,因此很容易修改前进/后退函数。

在部署应用程序后迁移到 South 相当容易。最新的 0.6 版本实际上包含了一个命令。

manage.py convert_ to _south [appname]

当然,我怎么会忘记,我最喜欢的功能是自动生成迁移文件

manage.py schemamigration [appname] [description] --auto


陷阱

我想我应该为我在开始使用 South 时所犯的错误添加一些提示。并非所有内容都是 100% 直观的。

在开发数据库上运行 convert_to_south 命令后,不要忘记在生产数据库上运行 migrate --fake,否则 South 会认为它已经过时了。

如果您要创建新应用,请使用 --initial 标志

停止使用 manage.py syncdb。真的。

编辑模型是一个 3 步过程 --

1.) 保存模型更改

2.) 运行schemamigration --auto

3.) 运行 migrate 以实际将更改提交到数据库

编辑 -- 为了澄清下面的 cmets,核心贡献者正式投票决定不将 South 包含在 1.2 版中。部分原因是《南方》的作者要求不要将其包括在内。尽管如此,South 还是有很多社区支持,一些可重复使用的应用程序制造商开始在他们的应用程序中包含 South 迁移。

编辑 #2 -- 我做了一些更新,以反映来自当前 South 主干版本的新 manage.py 命令结构。 “startmigration”已根据您的操作分为“schemamigration”和“datamigration”。

【讨论】:

另外,South 在 1.2 版中成为 django.contrib 的一部分,这将使其成为迁移的标准系统:code.djangoproject.com/wiki/Version1.2Features @Adam Nelson 尚未决定。您链接到的 wiki 页面是一个提案列表。核心开发者目前正在对提案进行投票(以获得对它们的整体支持感),我相信目前的观点倾向于不包括 South(还)。 South 的维护者说他现在不想被束缚在 Django 的发布时间表上。 在几个月不使用 django 之后,重新开始,我问自己一个问题,“我应该开始使用 South 吗?”...我很高兴找到了这个问题!

以上是关于目前使用 Django “Evolution”,“South”是不是更好,值得切换?的主要内容,如果未能解决你的问题,请参考以下文章

在多个数据库上排序 Play Evolution

ubuntu上解决evolution邮箱附件为dat格式

Play / Slick / Evolution 未应用

adaptation|domestication|genome evolution|convergent evolution|whole-genome shotgun sequencing|IHGSC

b2evolution 到 WordPress 移动和转换

ModX Evolution:同上 + phx 代码