值得使用sqlalchemy-migrate吗?

我有一个使用sqlalchemy(在Pylons内)的Web应用程序。 我需要有效地改变模式,至less每天可以更改生产版本,也许更多,而不会丢失数据。

我已经在周末结束了一些平移的工作,我会说这给了我一个不好的印象。 首先, 我认为它不能帮助两个数据库引擎之间的迁移 ; 这是sqlalchemy可以完成的。 其次,这些文档似乎并不是最新的。 我不得不改变一些命令行选项,比如在每个命令中提供版本库path,这可能是一个迁移的错误。

但最糟糕的是它的“manage.py testing ”命令。 不仅它实际上修改了数据库 (在文档中明确指出了这一点,所以我不能指责迁移),但是我的第一个迁移脚本只是简单地进行了笨拙的模式迁移,使升级后的降级数据库与原来的模式不同 。 但是“manage.pytesting”只是回答了类似的问题

success ! 

也就是说,它甚至不检查模式是否处于一致状态。 那么是否值得使用迁移? 与S.Lott提出的与良好实践相关的Do It Yourself方法相比,有没有什么优势? 是否有替代sqlalchemy-migrate实际上简化了迁移过程,或者我只是试图使用先前不好的迁移(然后请告诉我为什么不明显优于上面链接中build议的创buildCSV列)?

非常感谢!

改用Alembic:

http://pypi.python.org/pypi/alembic

感谢评论,编辑添加一些推理 –

它是由SQLAlchemy的作者开发的,它是全新的,并得到很好的支持。 我不太了解sqlalchemy迁移,以给出一个很好的比较。 但是我快速浏览了清晰简洁的Alembic文档,然后在很短的时间内完成了自己的自动迁移工作。

自动生成:不是唯一的操作模式,但是如果您select,Alembic将会读取您的应用程序的sqlalchemyconfiguration(例如,您的声明模型类,设置所有表,约束和映射),并与您的实际当前状态数据库,并输出一个代表这两者之间增量的Python脚本。 然后,您将该脚本传递给Alembic的升级命令,然后您就可以开始解决差异。 通常需要less量手动编辑迁移脚本,这是(a)迁移的本质,和(b)无论如何你想要做的事情,以确保你完全知道迁移的确切步骤在你运行之前要去执行。

Alembic也带来了像DVCS一样的能力来跟踪您的迁移。 这使得它很容易返回到您的数据库模式的任何过去的状态。

Alembic出局了( http://pypi.python.org/pypi/alembic ),并由SQLAlchemy作者维护,并考虑到sqlalchemy-migrate开发看起来停滞不前,今年几乎没有任何提交( http://code.google.nl/)。; com / p / sqlalchemy-migrate / source / list ),我认为不值得使用它,我将把当前的项目切换到Alembic。

如果仍然大量维护,我会对项目与SQLAlchemy保持同步的能力有信心(之前是这种情况)。

我个人喜欢使用它。 这很棒,因为新的安装(dev,test,prod)可以很容易地启动。 不仅如此,它为应用程序的发展提供了一个家,为从应用程序的版本转移到另一个版本时需要进行的迁移提供了很好的切入点。 有些东西需要在开发,testing和生产服务器上执行alter / etc。

这是完美的吗? 不。 你可以让数据库处于不良状态,但这就是为什么你有开发/testing/生产版本的东西。

我个人使用它来引导我的unit testing在塔上使用SQLite数据库运行unit testing,但我们在生产中使用MySQL。 所以有一些交叉数据库平台使用它的优势。