在django中管理数据库迁移的最佳解决方案是什么?

时间:2009-01-08 22:55:32

标签: python database django data-migration schema-migration

我非常喜欢Rails的数据库迁移管理系统。它不是100%完美,但它可以做到这一点。 Django没有附带这样的数据库迁移系统(但是?)但是有很多开源项目可以做到这一点,例如django-evolution和south。

所以我想知道,您更喜欢django的数据库迁移管理解决方案吗? (每个答案可以选择一个选项)

8 个答案:

答案 0 :(得分:22)

我一直在使用South,但Migratory看起来很有希望。

答案 1 :(得分:9)

Migratory看起来很简单。

答案 2 :(得分:3)

我们在工作中使用Django,我们一直在使用dmigrations。虽然它有它的怪癖,但它到目前为止一直很有用。一些功能:

  • 它使用数据库中的表来跟踪已应用的迁移。
  • 因为它知道应用了哪些,您可以向上和向下迁移。
  • 它与manage.py作为命令集成。
  • 各个迁移脚本都是Python,但如果您的迁移逻辑是纯SQL,那么 dmigrations 可以让SQL轻松实现并执行它。

一个问题是它目前只支持MySQL。然而,我们的一个人在本地黑客上支持PostgreSQL,我们使用它。我记得,黑客攻击并不是那么广泛,所以要破解它以支持其他RDBMS并不是非常困难。

答案 3 :(得分:3)

如果您使用SQLAlchemy作为您的ORM,那么事实上的标准是Alembic

另一个尚未提及的替代方案是yoyo-migrations

答案 4 :(得分:2)

我喜欢django-evolution

的优点:

  • 清洁设计
  • 不需要SQL
  • 灵活
  • 安装简单
  • 易于使用

缺点:

  • 迁移未在代码库中修复
  • 存在意外运行迁移两次的风险

答案 5 :(得分:1)

除了南方,dmigrations,django-evolution和Migratory之外,我想我会添加simplemigrations作为我看到的自动化Django迁移的另一个工具。

我过去曾使用其中的三种,但现在手工迁移。由于添加了最新功能,我正在考虑再次尝试南方。

答案 6 :(得分:1)

请注意,自2009年以来,除了南方之外,这里提到的每个项目都已经死了。 South是事实上的标准,无论好坏。

答案 7 :(得分:0)

我一直在使用simple-db-migrate

优点:

  • 它允许我回滚迁移(IDK,如果其他人也这样做)。
  • 与manage.py
  • 集成
  • 知道SQL的每个人都可以创建迁移
  • 它不会运行两次迁移:应用程序在表上写入迁移信息(时间戳,查询等)

缺点:

  • 如果添加时间戳低于安装的最新迁移的迁移,则此迁移不会运行
  • 仅支持MySQL