Python sqlite3 의 가장 surprising 한 부분
Python sqlite3 모듈이 SQLite 위에 자기 implicit transaction 동작 가짐. 기본값이 자주 사람들 놀래.
- 기본값: 첫 DML statement (INSERT/UPDATE/DELETE) 전 자동 transaction open.
- Non-DML statement (CREATE TABLE 등) 전 자동 commit — 유명한 'PRAGMA inside transaction' 버그 원천.
- 모듈의
isolation_level속성이 이걸 제어.conn.isolation_level = None이 implicit transaction 끔 —BEGIN/COMMIT로 explicit 관리.
대부분 결국 쓰는 Pythonic 패턴:
with conn:— context manager: implicit BEGIN, 성공 시 COMMIT, exception 시 ROLLBACK.- 또는
isolation_level = None설정 + 명시적conn.execute('BEGIN IMMEDIATE').
Warning: Python 3.12 가 legacy
isolation_level 보다 명확한 새 autocommit 속성 추가. 새 코드는 명시적 transaction 의 autocommit=False, 또는 autocommit=True 의 autocommit-style 선호. 옛 코드는 isolation_level; 양 API 공존.