【问题标题】:What is your favorite solution for managing database migrations in django? [closed]你最喜欢在 django 中管理数据库迁移的解决方案是什么? [关闭]
【发布时间】:2010-09-30 09:28:56
【问题描述】:

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

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

【问题讨论】:

  • Django 从 1.7 开始提供迁移工具。尽管似乎还有其他人在踢,例如 simple-db-migrate,但领先的替代方案 South 现在指向 Django 的内置迁移工具。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Migratory 看起来又漂亮又简单。

    【讨论】:

    • 截至 2010 年 9 月,Migratory 似乎已经死了。自 2009 年 1 月以来没有任何源代码提交,它期待 Django 中的内容,而这些内容在最新版本中不再存在。
    【解决方案3】:

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

    另一个没有提到的替代方案是yoyo-migrations

    【讨论】:

    • 悠悠球迁移岩石
    【解决方案4】:

    我们在工作中使用 Django,并且一直在使用 dmigrations。虽然它有其怪癖,但到目前为止它一直很有用。一些特点:

    • 它使用数据库中的表来跟踪已应用的迁移。
    • 因为它知道应用了哪些,所以您可以上下迁移。
    • 它与manage.py 集成为一个命令。
    • 单独的迁移脚本是 Python,但如果您的迁移逻辑是纯 SQL,dmigrations 可以很容易地只创建 SQL 并执行它。

    一个问题是它目前只支持 MySQL。然而,我们的一个人对其进行了本地破解以支持我们使用的 PostgreSQL。我记得,hack 并没有那么广泛,所以破解它以支持其他 RDBMS 应该不难。

    【讨论】:

      【解决方案5】:

      我喜欢django-evolution

      优点:

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

      缺点:

      • 迁移在代码库中不固定
      • 存在意外运行迁移两次的风险

      【讨论】:

      • 我认为在正常工作流程中不可能运行两次迁移。当我运行 manage.py Evolution --hint --execute 时,它​​会应用更改,第二次运行它什么也不做。
      【解决方案6】:

      除了 South、dmigrations、django-evolution 和 Migratory,我想我会添加 simplemigrations 作为我见过的另一个自动化 Django 迁移的工具。

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

      【讨论】:

        【解决方案7】:

        请注意,自 2009 年以来,除了 South 之外,这里提到的几乎所有项目都已死亡。 South 是事实上的标准,无论好坏。

        【讨论】:

        • South 已经有一段时间没有任何更新了,您为他们的域发布的链接已关闭。你还会认为它是事实上的标准吗?
        • @cwadding 不,我认为 Django 的内置迁移是标准。
        • 如果您没有创建 Django 应用程序而只需要 ORM 和迁移怎么办?你还会使用 Django 的内置迁移吗?
        • @cwadding 迁移用于 ORM。
        【解决方案8】:

        我一直在用simple-db-migrate

        优点:

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

        缺点:

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

        【讨论】:

          猜你喜欢
          • 2010-09-12
          • 2010-09-11
          • 1970-01-01
          • 2010-09-05
          • 2010-10-08
          • 2011-07-18
          • 2010-09-05
          • 1970-01-01
          相关资源
          最近更新 更多