我想知道在项目的大量初始开发过程中使用 (django) South 的优势。
在开发的早期阶段,通常会发生快速的模型更改、频繁的分支和合并(尤其是如果您使用像 git-flow 这样的开发策略)并且存储的数据非常少(如果有的话)。为什么要保留这些初始模型更改?有什么优点/缺点?
我的印象是,在激活 South 并执行初始迁移之前,等待开发稳定下来(并且您拥有实际想要保留的数据)更容易。有可能这样做吗?你想这样做吗?
我想知道在项目的大量初始开发过程中使用 (django) South 的优势。
在开发的早期阶段,通常会发生快速的模型更改、频繁的分支和合并(尤其是如果您使用像 git-flow 这样的开发策略)并且存储的数据非常少(如果有的话)。为什么要保留这些初始模型更改?有什么优点/缺点?
我的印象是,在激活 South 并执行初始迁移之前,等待开发稳定下来(并且您拥有实际想要保留的数据)更容易。有可能这样做吗?你想这样做吗?
一旦我要推送其他人需要使用的提交,我就会创建一个迁移,这样他们仍然可以拥有一个工作副本。
如果您是独自工作(并且不担心部署),这不是问题,您可以等到最后一刻创建迁移。
一旦您开始与他人合作,快速进行迁移就会变得更轻松,因此它会成为一种工作流习惯,并且每个人都在同一个数据库页面上。
此外,如果您只是修改字段,则不能选择 syncdb。仅仅为了添加、删除或修改字段就必须炸毁一个表是非常烦人的。
如果我添加了一堆架构迁移,有时我会将它们组合(回滚并删除它们并创建新的巨型迁移)到单个迁移中。但通常情况下,迁移的数量并不会打扰我,因为它们并没有真正让我付出任何代价。
我发现 South 在开发过程中和之后一样有用,正是因为表字段经常变化。不得不删除一个表并使用syncdb重新创建它只是为了添加一个字段是非常烦人的,特别是如果你有任何测试数据。(您也可以直接在 DBMS 中修改表,但是您必须小心使用 Django 期望的相同字段类型,适当地设置 ON DELETE 等属性等)。另外,如果其他人正在从事该项目,您必须确保告诉他们对他们的数据库副本进行完全相同的更改。南方让它更简单,IMO。
话虽如此,如果 South 可以选择删除所有以前的迁移可能会很酷,因此当您结束初始开发并开始添加真实数据时,您可以从头开始。但最终这十几个额外的迁移文件并没有真正花费您任何费用。
在最初的开发过程中,我不使用 South。我只有一个为每个应用程序创建固定装置的脚本,所以当架构更改时,我会转储旧的测试数据,编辑架构,更新测试数据以使其与新架构一起使用,然后恢复数据。
好消息 - 截至 2014 年 9 月 2 日,迁移现在是核心 Django 1.7 版的一部分。
https://docs.djangoproject.com/en/dev/releases/1.7/
我正要安装 South,现在我不必安装了。希望这能给处于相同情况的其他用户提供有用的提示。
绝对有可能从某个阶段开始使用南并进行初始迁移。南文档在这里: http ://south.aeracode.org/docs/tutorial/part1.html#converting-existing-apps
我在开发过程中确实使用了 south,因为我经常有用于测试 UI 或类似东西的数据。如果您在每次模型更改后不从一个完整的新数据库开始,South 也非常有助于保持数据库的一致性。因此,我也同意 meder,如果 Django 能够进行模式迁移,那就太好了,另一方面,这并不重要,因为南很容易实现。