【问题标题】:SQLAlchemy, Alembic and new instancesSQLAlchemy、Alembic 和新实例
【发布时间】:2016-05-17 13:52:21
【问题描述】:

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

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

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

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

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

可能还有其他选择吗?

【问题讨论】:

    标签: python sqlalchemy flask-sqlalchemy alembic


    【解决方案1】:

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

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

    这是命令行中的文档:

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

    【讨论】:

    • 感谢您的回复,您所描述的基本上是我们目前所做的,只是手动的。如果表不存在,stamp 会创建表吗?
    • 是的。刚刚测试过了。
    猜你喜欢
    • 2017-01-08
    • 2018-11-10
    • 2019-07-13
    • 2013-02-08
    • 2014-12-02
    • 2017-09-07
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多