版本跟踪,使用Django自动化数据库模式更改

11

我目前正在研究用Python框架Django来开发基于数据库的Web应用程序,以及将一些目前使用PHP编写的应用程序移植到Django。在过去的几年中,我遇到了一个比较麻烦的问题,就是跟踪数据库模式的更改并将这些更改部署到生产系统中。我没有敢要求撤销它们的功能,但当然对于测试和调试来说,这将是一个很棒的功能。从其他类似问题(例如这个这个)中,我可以看出我不是唯一一个遇到这个问题的人,而且这不是一个小问题。此外,我在那里找到了许多启发。

现在,由于Django似乎非常强大,它是否有任何工具可帮助解决上述问题?也许它甚至在他们的文档中,而我只是错过了它?

6个回答

12

至少有两个第三方工具可以处理数据库架构迁移,SouthDjango Evolution。我没有尝试过它们中的任何一个,但我听说过South的一些好处,尽管Evolution存在更长时间。

此外,请查看Django Wiki上关于数据库迁移的SchemaEvolution页面。这只是一个关于迁移数据库的维基页面。


在使用Django Evolution一番之后,我认为South的数据迁移功能是最强大的。我认为Django Evolution目前还没有数据迁移,只有模式升级。因此,在日期选择方面,South似乎是最好的选择。 - Rasiel

2
上次我查看时(版本0.97),syncdb可以添加表格以将数据库架构与models.py文件同步,但它无法:
  • 重命名或在已填充的数据库中添加列。您需要手动完成此操作。
  • 重构模型(例如将表拆分为两个)并相应地重新填充数据库。
可能可以编写一个Django脚本通过操作两个不同的管理器来进行迁移,但如果您的数据库很大,这可能需要很长时间。

1
最近在 DjangoCon 上有一个关于数据库模式更改的面板讨论;有一个会话视频(感谢 Google),其中应该提供了一些关于这些实用工具的有用信息。

不错的会议。我想我已经决定坚持使用Django Evolution了。 - Farinha

0

你应该查阅Dmigrations,它与django-eveoltions有一些不同之处。它会展示它正在做的一切,并在复杂的情况下要求你进行干预。这将非常棒。


0

现在还有dmigrations。来自announcement

django-evolution试图通过巧妙地检测模型中尚未反映在数据库模式中的更改,并找出需要执行的操作,以使两者重新同步来解决这个问题。相比之下,dmigrations采用了愚蠢的方法:它要求您明确声明一系列迁移中的更改,这些更改将依次应用于将数据库更新到反映底层模型的最新状态。

这意味着对于创建迁移的开发人员来说需要额外的工作,但它也使整个过程完全透明 - 对于我们的项目,我们决定采用可能起作用的最简单的系统。

(我加粗)


0

我听说过很多关于Django Schema Evolution Branch的好评,这些都是实际用户的意见。它基本上可以直接使用,并且能够完成它应该做的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接