在事务中运行alembic升级迁移

Pet*_*ron 10 transactions database-migration alembic

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

Rac*_*ers 6

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

  • 诸如“ ALTER / CREATE / DROP TABLE”之类的MySQL DDL命令会自动提交任何正在进行的事务,因此通常完全不使用事务“更安全”(至少更可预测)。换句话说,事务中不包含架构更改。 (3认同)

Ale*_*ino 6

您可以在 中决定这一点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()
Run Code Online (Sandbox Code Playgroud)