[英]How to VACUUM a SQLite database from within an Alembic migration?
我正在使用SqlAlchemy Alembic在SQLite数据库上执行数据库迁移。 我的迁移之一删除了许多冗余记录,我想在删除后对数据库进行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.