11

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

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

4

6 回答 6

12

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

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

于 2008-08-21T15:20:00.040 回答
2

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

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

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

于 2008-08-21T14:21:19.293 回答
1

在最近的 DjangoCon 上有一个关于 DB 模式更改的小组会议;有一个会议视频(感谢谷歌),它应该提供一些关于这些实用程序的有用信息。

于 2008-09-25T06:06:20.257 回答
0

现在也有迁移。来自公告

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

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

(我的大胆)

于 2008-09-04T08:29:34.423 回答
0

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

于 2008-09-07T09:41:21.087 回答
0

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

于 2008-09-18T16:44:03.053 回答