Sqlalchemy alembic中模式分支之间的切换

Sqlalchemy alembic中模式分支之间的切换,sqlalchemy,alembic,Sqlalchemy,Alembic,我正试图了解alembic的特性,可能正在使用 alembic在某种程度上并不是专门为它设计的,所以我想从 专家 在我的设计中,我有两种数据库模式的变体(例如“A”和“B”) 变量是独占的,特定的数据库实例必须选择使用一个 初始化时的变量。这两种变体在开发过程中都在发生变化 我使用Alembic管理单个变体的模式升级。对于 管理目的我的两个分支的Alembic历史记录从一个 基底也是分支点,类似于: (branch: A) +--> a1 --> a2 --> a3

我正试图了解alembic的特性,可能正在使用 alembic在某种程度上并不是专门为它设计的,所以我想从 专家

在我的设计中,我有两种数据库模式的变体(例如“A”和“B”) 变量是独占的,特定的数据库实例必须选择使用一个 初始化时的变量。这两种变体在开发过程中都在发生变化 我使用Alembic管理单个变体的模式升级。对于 管理目的我的两个分支的Alembic历史记录从一个 基底也是分支点,类似于:

   (branch: A)
   +--> a1 --> a2 --> a3 --> a4 --> ...
  /
root
  \
   +--> b1 --> b2 --> b3 --> b4 --> ...
   (branch: B)
   +--> a1 --> a2 --> a3 --> a4 --> ...
  /                          |
root                         |
  \                          v
   +--> b1 --> b2 --> b3 --> b4 --> ...
这很好,但现在对于某些情况,我想从变体A切换 对于B,假设从a3或a4版本到b4版本,类似于:

   (branch: A)
   +--> a1 --> a2 --> a3 --> a4 --> ...
  /
root
  \
   +--> b1 --> b2 --> b3 --> b4 --> ...
   (branch: B)
   +--> a1 --> a2 --> a3 --> a4 --> ...
  /                          |
root                         |
  \                          v
   +--> b1 --> b2 --> b3 --> b4 --> ...
这可能看起来像a4修订版的合并,但实际上并非如此,而是更多 类似于“git checkout”,但我还需要确保来自分支A的数据是正确的 当然迁移到B分支了

我尝试引入特殊迁移,例如在a4处分支,在a4处结束 b4,但这让Alembic感到困惑,显然不可能有两个独立的 导致相同修订的迁移脚本,即“合并”是唯一的方法 一个修订有多个父项。但合并是行不通的 这里也是因为b3和a4不能在同一个数据库中共存

我认为很明显,标准历史(从上图)和a4-b4 迁移步骤不可能存在于共同的历史记录中,因此我正在考虑 通过隐藏其标准历史和仅暴露a4-b4来与Alembic混为一谈 当我需要执行此特殊迁移时,请执行此步骤,但我不确定它是否正在进行 在规模上运行良好(有更多的特殊迁移)

有没有人有过类似的问题,并且能够合理地解决这些问题 分享你的经验