【问题标题】:Why use South during initial development?为什么在初始开发过程中使用 South?
【发布时间】:2011-06-28 15:39:48
【问题描述】:

我想知道在项目的繁重初始开发过程中使用 (django) South 的优势。

在开发的早期阶段,通常会发生快速的模型更改、频繁的分支和合并(特别是如果您使用 git-flow 之类的开发策略),并且存储的数据非常少(如果有的话)。为什么要保留这些初始模型更改?有什么优点/缺点?

我的印象是,在激活 South 并执行初始迁移之前,等待开发稳定下来(并且您拥有真正想要保留的数据)会更容易。有可能这样做吗?你愿意这样做吗?

【问题讨论】:

  • 我同意。这就是为什么我认为 Django 需要在核心中集成一些模式更改功能,因为它目前非常令人沮丧。
  • @meder 您如何建议在没有迁移系统的情况下这样做?在我看来,南方很好地填补了这个空白。
  • 在每次影响数据库的模型更改后,我只保留一个版本控制文件 Evolution.sql 粘贴到 SQL 命令中。我还有一个 Evolution.py,它使用较低级别的 DB 包装器(在我的例子中是 MySQLdb)进行数据密集型迁移更改。更少的代码,更少的错误。在数据方面,我不希望出现问题。
  • @Frank 可能适用于模式更改(前提是您跟踪先前运行的命令)。使用 south,您不必编写 SQL(它更便携,而且谁还想编写 SQL?)来进行更改。如果您在同一个项目中有多个开发人员,那么您的解决方案也是噩梦般的。
  • 这没什么可怕的。对我来说唯一可怕的只是另一种依赖。可移植的迁移代码是我最不想使用的东西。框架提供的自动化使人们变得懒惰。用特定于数据库的方言编写迁移 SQL 并没有错,除非您为程序员制作产品并且必须支持不同的数据库。尽早了解您的数据库,这样您就不需要在头发长大时拔掉头发。低水平是好的。在数据一致性方面,您想知道到底发生了什么。

标签: django django-models django-south


【解决方案1】:

当我要推送其他人需要使用的提交时,我会创建一个迁移,以便他们仍然可以拥有工作副本。

如果您是独自工作(并且不担心部署),这不是问题,您可以等到最后一刻创建迁移。

一旦您开始与他人合作,快速进行迁移会变得更轻松,因此它会成为一种工作流习惯,并且每个人都在同一个数据库页面上。

此外,如果您只是修改字段,则不能选择 syncdb。仅仅为了添加、删除或修改字段就必须炸毁一个表,这非常烦人。

如果我添加了一堆架构迁移,有时我会将它们组合(回滚并删除它们并创建一个新的巨型迁移)到一个迁移中。但通常情况下,迁移的数量并不会打扰我,因为它们并没有真正让我付出任何代价。

【讨论】:

    【解决方案2】:

    我发现 South 在开发过程中和之后一样有用,正是因为表字段经常变化。不得不删除一个表并使用syncdb重新创建它只是为了添加一个字段是非常烦人的,特别是如果你有任何测试数据。 (您也可以直接在 DBMS 中修改表,但是您必须小心使用 Django 期望的相同字段类型,适当地设置 ON DELETE 等属性等)。另外,如果其他人正在从事该项目,您必须确保告诉他们对他们的数据库副本进行完全相同的更改。 South 让它变得简单多了,IMO。

    话虽如此,如果 South 可以选择删除所有以前的迁移,那可能会很酷,因此当您结束初始开发并开始添加真实数据时,您可以从头开始。但最终这十几个额外的迁移文件并没有真正让您付出任何代价。

    【讨论】:

    • 关于删除所有以前的迁移,如果您想从当前架构重新开始(模仿同步数据库),您可以简单地删除数据库中的所有表并删除所有迁移,然后执行 schemamigration --initial每个应用程序。
    【解决方案3】:

    在最初的开发过程中,我不使用 South。我只有a script,它为每个应用程序创建了固定装置,所以当架构更改时,我会转储旧的测试数据,编辑架构,更新测试数据以便它可以与新架构一起使用,然后恢复数据。

    【讨论】:

      【解决方案4】:

      绝对可以从某个阶段开始使用南并进行初始迁移。南文档在这里:http://south.aeracode.org/docs/tutorial/part1.html#converting-existing-apps

      我在开发过程中确实使用了 south,因为我经常有用于测试 UI 或类似东西的数据。如果您在每次模型更改后不从一个完整的新数据库开始,South 也非常有助于保持数据库的一致性。因此我也同意 meder,如果 Django 能够进行架构迁移,那就太好了,另一方面,这并不重要,因为南很容易实现。

      【讨论】:

        【解决方案5】:

        好消息 - 自 2014 年 9 月 2 日起,迁移现已成为核心 Django 1.7 版的一部分。

        https://docs.djangoproject.com/en/dev/releases/1.7/

        我正要安装 South,现在我不必安装了。希望这能给处于相同情况的其他用户提供有用的提示。

        【讨论】:

          猜你喜欢
          • 2013-08-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-09
          • 2014-08-23
          • 2017-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多