SQLAlchemy、Alembic 和新实例
SQLAlchemy, Alembic and new instances
在使用 Flask、SQLAlchemy 和 Alembic 的平台中,我们经常需要使用自己的资源集(包括数据库)创建新的独立实例。
创建新实例时,SQLAlchemy 的 create_all
为我们提供了一个数据库,其中包含创建实例时的所有更新,但这意味着这个新实例没有旧实例的迁移历史实例有。它没有指向最新迁移的 Alembic 修订 table。
因此,当需要更新旧实例(具有迁移历史记录)和没有迁移历史记录的新实例时,我们必须为新实例提供一组自定义修订(忽略比数据库本身更旧的迁移)或为它创建一个假的迁移历史并使用一组全局迁移。对于这种情况发生的几次,我们都选择了后者。
进行根迁移,将整个数据库设置为第一次迁移之前的状态,然后 运行 所有迁移而不是 create_all 是否是引导新实例数据库的更好选择?
随着迁移数量的增加,我担心它的可扩展性。
是否还有其他选择?
如果您知道数据库的状态,您可以标记您在实例中创建时所在的修订。
- 设置实例
- 运行 create_all
- alembic heads(以确定脚本目录中可用的最新版本)
- 蒸馏器邮票
这是来自命令行的文档:
stamp 'stamp' the revision table with the given revision;
don't run any migrations.
在使用 Flask、SQLAlchemy 和 Alembic 的平台中,我们经常需要使用自己的资源集(包括数据库)创建新的独立实例。
创建新实例时,SQLAlchemy 的 create_all
为我们提供了一个数据库,其中包含创建实例时的所有更新,但这意味着这个新实例没有旧实例的迁移历史实例有。它没有指向最新迁移的 Alembic 修订 table。
因此,当需要更新旧实例(具有迁移历史记录)和没有迁移历史记录的新实例时,我们必须为新实例提供一组自定义修订(忽略比数据库本身更旧的迁移)或为它创建一个假的迁移历史并使用一组全局迁移。对于这种情况发生的几次,我们都选择了后者。
进行根迁移,将整个数据库设置为第一次迁移之前的状态,然后 运行 所有迁移而不是 create_all 是否是引导新实例数据库的更好选择?
随着迁移数量的增加,我担心它的可扩展性。
是否还有其他选择?
如果您知道数据库的状态,您可以标记您在实例中创建时所在的修订。
- 设置实例
- 运行 create_all
- alembic heads(以确定脚本目录中可用的最新版本)
- 蒸馏器邮票
这是来自命令行的文档:
stamp 'stamp' the revision table with the given revision;
don't run any migrations.