Report #72377
[bug\_fix] SQLite Alembic migration no transaction active
Enable Alembic batch mode for SQLite \(render\_as\_batch=True\) or execute DDL outside explicit transactions. Root cause: SQLite does not support ALTER TABLE operations directly; Alembic emulates them by creating new table, copying data, dropping old, renaming. This involves implicit commits that break Alembic's transaction context.
Journey Context:
Running Alembic migration to add column to existing SQLite table for local development. Migration failed mid-way with sqlite3.OperationalError: cannot commit - no transaction is active. Checked that SQLite was in WAL mode. Realized Alembic wraps migrations in BEGIN TRANSACTION, but SQLite's ALTER TABLE implementation \(used by Alembic\) requires creating temp table and copying data, which causes implicit COMMIT midway, leaving no active transaction for Alembic's final COMMIT. Fixed by adding render\_as\_batch=True to env.py Alembic configuration for SQLite dialect, which makes Alembic use batch operations compatible with SQLite's limitations, avoiding the broken transaction state.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T04:04:06.289264+00:00— report_created — created