【问题标题】:Work on multiple branches with Flask-Migrate使用 Flask-Migrate 在多个分支上工作
【发布时间】:2019-09-06 23:12:46
【问题描述】:

我正在使用 Flask-Migrate (Alembic) 来管理 SQLAlchemy 数据库迁移。我正在两个具有不同迁移的不同分支上工作。

  1. 如果我切换分支,我会收到找不到迁移的错误。
  2. 如果我将此分支合并到父分支中,我需要在两个分支上降级迁移并创建一个新分支。如果我不这样做,我会得到迁移的冲突错误。

我怎样才能更轻松?也许另一个工具更像 Django 的迁移,但用于 Flask?

【问题讨论】:

    标签: python git sqlalchemy alembic flask-migrate


    【解决方案1】:

    Alembic 要求迁移链与当前迁移的数据库标记相匹配。如果您在一个分支上创建并运行一些迁移,然后切换到另一个分支,则该数据库被标记为正在进行一个不再存在的迁移。

    要在使用迁移时在多个分支上工作,您需要弄清楚要切换到的分支上最新的常见迁移是什么,然后首先降级到该版本。然后签出分支,并运行它独有的任何迁移。

    例如,假设您在“dev”分支上创建了两个名为“feature1”和“feature2”的分支,并且每个分支自“dev”以来都有一个新的迁移。从“feature1”切换到“feature2”:

    1. 降级添加到分支的迁移,在本例中为 1:flask db downgrade -1
    2. 结账分店:git checkout feature2
    3. 为新分支应用任何升级:flask db upgrade

    如果您不希望由于删除列或表的降级而丢失数据,则需要转储并恢复每个分支的数据库。


    如果您正在处理“feature1”并将其合并到“dev”中,则需要更新“feature2”以便它知道合并的新迁移。只要所有的,Alembic 将支持拥有多个分支存在迁移。合并“feature2”后,您可以生成合并迁移以将两个迁移分支合并回一个。

    1. 将“feature1”合并到“dev”中:git checkout dev, git merge feature1
    2. 切换到“feature2”并合并“dev”:git checkout feature2git merge dev
    3. 从“dev”和“feature2”运行迁移:flask db upgrade
    4. 继续处理“feature2”。
    5. 将“feature2”合并到“dev”中:git checkout dev, git merge feature2
    6. 找到需要合并的迁移id:flask db heads
    7. flask db merge id1 id2,替换上一步中的 id。
    8. 更新合并,注意只有一个头:flask db upgrade,flask db heads

    很遗憾,这是一个手动过程。 Alembic 要求迁移链与数据库标记匹配,目前没有办法解决。您也许可以编写一个 git 钩子来帮助解决这个问题,但它不是已经存在的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      相关资源
      最近更新 更多