版本跟踪,使用 django 自动更改数据库架构

Posted

技术标签:

【中文标题】版本跟踪,使用 django 自动更改数据库架构【英文标题】:Version track, automate DB schema changes with django 【发布时间】:2010-09-06 09:48:35 【问题描述】:

我目前正在研究用于未来基于 db 的 Web 应用程序的 Python 框架 Django,以及当前用 php 编写的一些应用程序的端口。在我的最后几年中,最棘手的问题之一是跟踪数据库架构更改并将这些更改部署到生产系统。我也不敢要求能够撤消它们,但当然对于测试和调试来说,这将是一个很棒的功能。从这里的其他问题(例如this one 或this one),我可以看出我并不孤单,这不是一个小问题。另外,我从那里的答案中找到了很多灵感。

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

【问题讨论】:

【参考方案1】:

至少有两个第三方实用程序可以处理 DB 架构迁移,South 和 Django Evolution。我没有尝试过任何一个,但我听说过一些关于 South 的好消息,尽管 Evolution 的存在时间更长了。

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

【讨论】:

South 似乎是最好的约会,在玩过 Django Evolution 之后,我认为 South 的数据迁移是杀手级功能。我认为 Django Evolution 还没有数据迁移。仅 Schema Evelution【参考方案2】:

上次我检查(版本 0.97)时,syncdb 将能够添加表以将您的数据库架构与您的 models.py 文件同步,但它不能:

在填充的数据库上重命名或添加列。您需要手动完成。 重构您的模型(例如将一个表一分为二)并相应地重新填充您的数据库。

虽然可以编写一个 Django 脚本来通过使用两个不同的 managers 进行迁移,但如果您的数据库很大,这可能需要很长时间。

【讨论】:

【参考方案3】:

在最近的 DjangoCon 上有一个关于 DB 架构更改的小组会议;有一个video of the session(感谢 Google),它应该提供一些关于这些实用程序的一些有用信息。

【讨论】:

很好的会议。我想我已经下定决心坚持使用 django evolution。【参考方案4】:

现在还有dmigrations。来自announcement:

django-evolution 试图以聪明的方式解决这个问题,通过检测尚未反映在数据库模式中的模型的更改,并找出需要做什么来使两者恢复同步。 相比之下,dmigrations 采用了愚蠢的方法:它要求您在一系列迁移中显式声明更改,然后依次应用这些更改将数据库提升到反映底层模型的最新状态。强>

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

(我的粗体)

【讨论】:

【参考方案5】:

我听说了很多关于Django Schema Evolution Branch 的好消息,这些都是实际用户的意见。它通常是开箱即用的,可以做它应该做的。

【讨论】:

【参考方案6】:

你应该查找Dmigrations,它的功能与 django-eveoltions 有点不同。 它向您展示了它正在做的一切,对于复杂的事情,它会要求您进行干预。应该不错。

【讨论】:

以上是关于版本跟踪,使用 django 自动更改数据库架构的主要内容,如果未能解决你的问题,请参考以下文章

Django Model Formset:仅跟踪集合中已更新/保存的那些项目的更改?

有没有办法跟踪Django ORM中的事务更改?

跟踪对象字段变化的最佳架构是啥?

跟踪更改:svn + latex

部署 SQL SSDT 项目时如何跟踪数据更改

液化石油气。如何跟踪存储过程更改