我目前正在研究Python框架Django,以用于未来基于数据库的Web应用程序,以及目前用PHP编写的一些应用程序的端口。我过去几年中最糟糕的问题之一是跟踪数据库架构的变化并将这些变化部署到生产系统。我不敢要求能够撤消它们,但当然对于测试和调试来说这将是一个很棒的功能。从这里的其他问题(例如this one或this one),我可以看出我并不孤单,这不是一个微不足道的问题。此外,我在答案中找到了许多灵感。
现在,由于Django似乎非常强大,它是否有任何工具可以帮助解决上述问题?也许它甚至在他们的文档中我错过了它?
答案 0 :(得分:12)
至少有两个第三方实用程序可以处理数据库架构迁移,South和Django Evolution。我没有试过任何一个,但我听说过一些关于南方的好东西,尽管Evolution已经存在了一段时间。
另外,请查看Django wiki上的SchemaEvolution。它只是一个关于迁移数据库的维基页面。
答案 1 :(得分:2)
上次我检查(版本0.97)时,syncdb将能够添加表以将您的数据库架构与models.py文件同步,但它不能:
虽然可以通过使用两个不同的managers编写一个Django脚本来进行迁移,但如果你的数据库很大,这可能需要很长时间。
答案 2 :(得分:1)
最近的DjangoCon上有关于数据库模式更改的面板会话;有一个video of the session(感谢Google),它应该提供一些有关这些实用程序的有用信息。
答案 3 :(得分:0)
现在还有dmigrations。来自announcement:
django-evolution试图以聪明的方式解决这个问题,方法是检测尚未反映在数据库模式中的模型的变化,并弄清楚需要做些什么来使两者恢复同步。 相比之下,dmigrations采用了愚蠢的方法:它要求您明确说明迁移序列中的更改,这些更改将依次应用于将数据库升级到反映基础模型的最新状态。强>这对于创建迁移的开发人员来说意味着额外的工作,但它也使整个过程完全透明 - 对于我们的项目,我们决定使用最简单的系统,这可能有用。
(我的大胆)
答案 4 :(得分:0)
我听到很多关于Django Schema Evolution Branch的好消息,这些都是实际用户的意见。它主要是开箱即用,并做它应该做的事情。
答案 5 :(得分:0)
U应该查找Dmigrations,它的功能与django-eveoltions有点不同。 它向您展示了它正在做的一切,对于复杂的事情,它会向您询问您的干预。应该很棒。