繁体   English   中英

如何从 Alembic 迁移中对 SQLite 数据库进行 VACUUM?

[英]How to VACUUM a SQLite database from within an Alembic migration?

我正在使用SqlAlchemy AlembicSQLite数据库上执行数据库迁移。 我的迁移之一删除了许多冗余记录,我想在删除后对数据库进行VACUUM

这是我在迁移的upgrade()方法中尝试执行此操作的方式:

def upgrade():

    # deleting records here using op.execute()...

    op.execute("VACUUM")

迁移运行时失败并显示以下错误消息:

 E sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) cannot VACUUM from within a transaction E [SQL: VACUUM] E (Background on this error at: https://sqlalche.me/e/14/e3q8)```

该链接仅提供了关于OperationalError是什么的相当笼统的描述。

我怎样才能克服这个错误并从我的迁移中清理我的数据库?

有没有办法排除这个特定的命令或这个特定的迁移在事务中运行?

PS - 一般来说,我希望我的迁移在事务中运行,所以我不希望更改 Alembic 的默认行为(在env.py中设置)。

通过像这样包装它,我能够在迁移中成功执行VACUUM命令:

    with op.get_context().autocommit_block():
        op.execute("VACUUM")

这不需要对env.py进行任何更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM