我正在使用Flask-Migrate(Alembic)管理SQLAlchemy数据库迁移。我正在两个具有不同迁移的不同分支。
我怎样才能更轻松?也许其他工具更像Django的迁移工具,但适用于Flask吗?
答案 0 :(得分:4)
Alembic要求迁移链与当前迁移的数据库标记匹配。如果您在分支上创建并运行某些迁移,然后切换到另一个分支,则该数据库将被标记为已不存在的迁移。
要在使用迁移时在多个分支上工作,您需要弄清楚要切换到的分支上最新的常见迁移是什么,然后首先降级到该版本。然后检出该分支,并运行对该分支唯一的迁移。
例如,假设您从“ dev”分支创建了两个分支,分别称为“ feature1”和“ feature2”,并且自“ dev”以来每个都有一个新的迁移。要从“功能1”切换到“功能2”:
flask db downgrade -1
。git checkout feature2
flask db upgrade
如果您不想由于降级而删除列或表而丢失数据,则需要转储并还原每个分支的数据库。
如果您正在使用“ feature1”并将其合并到“ dev”中,则需要更新“ feature2”,以便它知道已合并的新迁移。Alembic将支持拥有多个分支,只要所有存在迁移。合并“ feature2”后,您可以生成合并迁移,以将两个迁移分支合并回一个分支。
git checkout dev
,git merge feature1
git checkout feature2
,git merge dev
flask db upgrade
git checkout dev
,git merge feature2
flask db heads
flask db merge id1 id2
,替换上一步中的ID。flask db upgrade
,flask db heads
不幸的是,这是一个手动过程。 Alembic需要迁移链来匹配数据库标记,而目前尚无解决方法。您也许可以编写一个git hook来帮助解决此问题,但这还不存在。