SQLAlchemy、Alembic和新实例

4
在使用 Flask、SQLAlchemy 和 Alembic 的平台上,我们经常需要创建具有自己资源集的新实例,包括一个数据库。
在创建新实例时,SQLAlchemy 的 create_all 会给我们一个包含所有更新的数据库,直到创建实例为止。但这意味着这个新实例没有旧实例所拥有的迁移历史记录。它没有指向最新迁移的 Alembic revisions 表。
因此,当更新旧实例(带有迁移历史记录)和没有迁移历史记录的新实例时,我们要么为新实例提供一组自定义的迁移(忽略比数据库本身旧的迁移),要么为其创建虚假的迁移历史记录并使用全局的迁移。对于这种情况,我们已经选择了后者。
相比于 create_all,制作一个根迁移来设置整个数据库,并运行所有迁移,是否是引导新实例数据库的更好选项?
我担心随着迁移数量的增加,这种方法的可扩展性会受到影响。
或许还有其他选择吗?
1个回答

1
如果您知道数据库的状态,那么在创建实例时可以直接标记您所在的修订版本。
步骤如下:
  1. 设置实例
  2. 运行create_all命令
  3. 运行alembic heads(以确定脚本目录中可用的最新版本)
  4. 运行alembic stamp命令
以下是命令行文档:

stamp 使用给定的修订版本“标记”修订表;不运行任何迁移。


谢谢您的回复,您所描述的基本上是我们迄今为止所做的,只不过是手动完成的。如果表还不存在,那么stamp会创建它吗? - RobertoCuba
1
是的,它可以。我刚测试了一下。 - Ian Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接