【问题标题】:Performing alembic operations without intermediate commits在没有中间提交的情况下执行 alembic 操作
【发布时间】:2015-09-28 10:53:41
【问题描述】:

我正在尝试以编程方式使用 alembic(不编写迁移)在我的数据库上执行一些 DDL 操作。

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 换成 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 仅在执行完两个命令后提交?

【问题讨论】:

    标签: python database sqlalchemy alembic


    【解决方案1】:

    只是在尝试一个疯狂的想法:

    也许您可以使用 --sql 标志运行 alembic,获取 sql 命令,使用 grep -iv commit 之类的内容过滤掉 COMMIT,然后添加最后一次提交

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      相关资源
      最近更新 更多