设计迁移脚本以使用Alembic进行事务处理

时间:2018-04-23 16:05:42

标签: sqlalchemy alembic

我一直致力于使用Alembic升级脚本与我的SQLAlchemy / SQLite数据库一起使用。该脚本的目的是将一列从十进制值更改为整数值。在这个过程中,我学会了SQLite doesn't support DROP COLUMN。但更糟糕的是,在处理这个问题时,Alembic让我的桌子处于中途状态,我编辑的表格同时包含十进制列和整数列。

但是这个问题并不是关于如何删除列。我知道我现在该怎么做。这个问题是关于我如何将Alembic升级/降级脚本以及DLM内容的所有DDL语句包装到一个事务中,如果遇到故障可以回滚。我想要一个安全的模式,我可以推广到我所有的Alembic迁移。

这是我正在寻找的伪代码:

def upgrade():
    # get context or connection or something
    # on context/connection/migration context/something do something like
    with context.begin_transaction():

        # do various DDL stuff
        # with various new DDL stuff, do bulk inserts and data manipulation
        # once finally done, commit and end the transaction. roll EVERYTHING back if it fails.

有很多混淆的是确定连接到我的数据库的正确方法。我是否会执行类似alembic.op.get_bind()的操作并使用其中的连接?我使用MigrationContext吗?

0 个答案:

没有答案