【问题标题】:Run alembic upgrade migrations in a transaction在事务中运行 alembic 升级迁移
【发布时间】:2014-04-01 10:45:07
【问题描述】:

alembic upgrade head 是否在事务中运行,以便所有数据库更改成功或失败?如果不是,为什么要这样设计?

【问题讨论】:

    标签: transactions database-migration alembic


    【解决方案1】:

    我的理解是,alembic 在支持它的数据库(如 Postgres)的事务中运行。如果您使用的数据库不支持此功能(cough MySQL cough),则无法使用此功能。

    【讨论】:

    【解决方案2】:

    您可以在 env.py 中决定这一点,您可以在其中自定义迁移的行为以适应您的设置。您可以从作为通用数据库示例提供的模板中了解如何确保您的升级发生在事务中:https://github.com/zzzeek/alembic/blob/eaaafbca88f85f5432e04affe1f94cbf1ad06080/alembic/templates/generic/env.py#L64

    def run_migrations_online():
        # ...
        with context.begin_transaction():
            context.run_migrations()
    

    【讨论】:

      猜你喜欢
      • 2019-07-14
      • 2019-12-11
      • 2019-05-07
      • 2016-05-25
      • 2015-12-24
      • 1970-01-01
      • 2015-12-10
      • 2012-10-27
      • 2015-03-31
      相关资源
      最近更新 更多