gpt4 book ai didi

django - 目前使用 Django "Evolution", "South"更好,值得切换吗?

转载 作者:行者123 更新时间:2023-11-28 19:35:37 25 4
gpt4 key购买 nike

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

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

最佳答案

我刚开始使用 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')

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

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

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

  • 如果您已经继续并自己进行了更改,您可以告诉 South 运行“假”迁移。通常迁移系统会发出嘶嘶声,但这使得对数据库的灵活控制变得非常容易。

    manage.py migrate [appname] --fake

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

  • 在已经部署了一个应用程序之后迁移到南方是相当容易的。最新版本 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 将更改实际提交到数据库

编辑 -- 为了澄清下面的评论,South 被核心贡献者正式投票决定不包含在版本 1.2 中。这部分是因为 South 的作者要求不将其包括在内。即便如此,South 仍然有很多社区支持,一些可重复使用的应用程序制造商开始在他们的应用程序中包含 South 迁移。

编辑 #2 -- 我进行了一些更新以反射(reflect) South 当前主干版本的新 manage.py 命令结构。 “startmigration”已根据您正在执行的操作拆分为“schemamigration”和“datamigration”。

关于django - 目前使用 Django "Evolution", "South"更好,值得切换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1590944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com