簡體   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