为什么南方使用迁移文件?

时间:2014-07-02 06:02:00

标签: python django database-migration django-south merge-conflict-resolution

我正在与另一位开发人员合作开发Django应用程序。到目前为止,我喜欢Django。

但是为了能够在开发过程中修改models.py,我拿起了南方的副本,现在我们一直在进行迁移合并冲突。

是的,我已经收到了备忘录:

The important message here is that South is no substitute for team coordination - in fact, most 
of the features are there purely to warn you that you haven’t coordinated, and the simple merging 
on offer is only there for the easy cases. Make sure your team know who is working on what, so they 
don’t write migrations that affect the same parts of the DB at the same time.

但我很困惑为什么存在迁移文件?如果models.py是数据库模式的权威词,那么迁移文件会给我什么?希望这将有助于我了解如何更好地使用南方。

3 个答案:

答案 0 :(得分:1)

如果您不关心您的数据,那么您不需要迁移文件,甚至南FWIW - 您只需要清除表并重新运行manage.py syncdb。这里的重点是允许数据迁移,一旦你在生产中并且拥有你关心的大量真实数据,这已被证明是一个非常有用的功能。

假设您有一个要分割为两个的字段或移动到另一个模型等...如果您不想丢失数据,则需要三个步骤:

  1. 添加新字段
  2. 将您的数据移至新字段
  3. 删除旧字段。
  4. 这转化为

    1. 第一个架构迁移
    2. 数据迁移
    3. 第二个schemamigration
    4. 注意:您当然可以将它全部放入一个迁移文件中(这显然是最干净的解决方案,因为它使您的迁移成为原子),但是更容易使用1和3的自动模式迁移生成。

      简而言之:“迁移文件”实际上是迁移脚本,这是您需要为任何现实生产项目编写的内容。 South主要提供一个支持框架(迁移脚本可能非常棘手)和一个非常方便的模式迁移生成器,它使您的生活更容易一个最常见的用例(非破坏性模式更改)。

答案 1 :(得分:0)

迁移文件保留模型的历史记录,最适用于版本控制系统(如SVN):

  1. 您更改models.py,然后进行迁移,它将成为您项目的一部分
  2. 其他团队成员进行迁移并运行它;然后他们对models.py进行自己的更改并创建正确的迁移
  3. 更多:迁移文件也用于数据迁移:您可以编辑它们以说明如何填充新字段或如何处理已删除的字段...

答案 2 :(得分:0)

拥有迁移文件允许您将数据库开发分成几个阶段。随时跟踪数据库中的变化,以便在历史记录中来回传递。

对以下内容有用:

  • 调试
  • 暂存您的应用程序(例如开发人员的服务器,测试服务器和生产)
  • 允许您使用某些自动化工具(结构)应用更改

当然可以通过其他方式完成,但随后可能会出现其他问题(如重置和填充整个数据库)