在事务中运行alembic升级迁移

时间:2014-02-28 12:19:04

标签: transactions database-migration alembic

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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()