2015-07-09 46 views
1

我想以编程方式使用alembic(无需编写迁移)在我的数据库上执行一些DDL操作。执行没有中间承诺的alembic操作

import sqlalchemy 
import alembic 
context = alembic.migration.MigrationContext.configure(sqlalchemy.create_engine("postgres://user:@localhost/database")) 
context.connection.echo = True 
with alembic.op.Operations.context(context) as op: 
    op.rename_table("table", "old_table") 
    op.rename_table("new_table", "table") 

基本上,我想在表中一次性换成new_table。但是,当我查看日志时,我看到alembic在第一个rename_table声明之后提交。

2015-07-09 16:51:02,590 INFO sqlalchemy.engine.base.Engine ALTER TABLE table RENAME TO old_table 
2015-07-09 16:51:02,590 INFO sqlalchemy.engine.base.Engine {} 
2015-07-09 16:51:02,591 INFO sqlalchemy.engine.base.Engine COMMIT 
2015-07-09 16:51:02,598 INFO sqlalchemy.engine.base.Engine ALTER TABLE new_table RENAME TO table 
2015-07-09 16:51:02,598 INFO sqlalchemy.engine.base.Engine {} 
2015-07-09 16:51:02,599 INFO sqlalchemy.engine.base.Engine COMMIT 

如何告诉alembic只有在执行完这两个命令后才提交?

回答

0

只是想一个疯狂的想法:

也许你可以运行蒸馏器与--sql标志,获得SQL命令,筛选出的东西,如grep -iv commit的提交和再加入上次提交