[英]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.