SQLAlchemy、Alembic 和新实例

SQLAlchemy, Alembic and new instances

在使用 Flask、SQLAlchemy 和 Alembic 的平台中,我们经常需要使用自己的资源集(包括数据库)创建新的独立实例。

创建新实例时,SQLAlchemy 的 create_all 为我们提供了一个数据库,其中包含创建实例时的所有更新,但这意味着这个新实例没有旧实例的迁移历史实例有。它没有指向最新迁移的 Alembic 修订 table。

因此,当需要更新旧实例(具有迁移历史记录)和没有迁移历史记录的新实例时,我们必须为新实例提供一组自定义修订(忽略比数据库本身更旧的迁移)或为它创建一个假的迁移历史并使用一组全局迁移。对于这种情况发生的几次,我们都选择了后者。

进行根迁移,将整个数据库设置为第一次迁移之前的状态,然后 运行 所有迁移而不是 create_all 是否是引导新实例数据库的更好选择?

随着迁移数量的增加,我担心它的可扩展性。

是否还有其他选择?

如果您知道数据库的状态,您可以标记您在实例中创建时所在的修订。

  1. 设置实例
  2. 运行 create_all
  3. alembic heads(以确定脚本目录中可用的最新版本)
  4. 蒸馏器邮票

这是来自命令行的文档:

stamp 'stamp' the revision table with the given revision; don't run any migrations.