python - 为什么south要用迁移文件呢?

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

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

但是我选择了 South 的副本,以便能够在开发过程中修改 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 是数据库模式的权威词,那么迁移文件会给我什么?希望这能帮助我了解如何更好地使用南方。

最佳答案

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

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

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

这转化为

  1. 第一次架构迁移
  2. 数据迁移
  3. 第二次架构迁移

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

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

关于python - 为什么south要用迁移文件呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24523911/

相关文章:

sql-server - 如何将 DACPAC 部署到事务复制数据库

python - 使用 os.walk 迭代文件,但无法打开和打印文本文件

python - 在大文本文件中查找重复记录

python - Django/mod_wsgi 操作系统错误 : [Errno 13] Permission denied: 'static' when DEBUG = OFF

Django select_related 与指定的字段打破多个一对一关系

python - Django FormView 不保存

python - Python 中的莫尔斯电码解密器不工作

python - 生成一个正则表达式可以在 Python 中匹配的值列表

node.js - 使用 Node db-migrate 在事务中禁用包装迁移

ruby-on-rails - 迁移运行时在 db/structure.sql 上删除了 Postgresql 扩展