가장 흔한 write
INSERT 는 단순해 보이지만 알아둘 모양이 몇 가지 있어:
- Positional —
INSERT INTO t VALUES (...). 컬럼 순서가CREATE TABLE선언 순서. 깨지기 쉬움. - Named columns —
INSERT INTO t(a, b) VALUES (...). 항상 이거 써. Schema 변경에 견뎌. - Multi-row —
INSERT INTO t(a) VALUES (1), (2), (3). 한 transaction, N 개 single-row insert 보다 훨씬 빠름. - INSERT ... SELECT —
INSERT INTO t(a) SELECT x FROM other. 다른 테이블에서 bulk copy. - RETURNING (3.35+) —
INSERT ... RETURNING id. Round-trip 추가 없이 생성된 값 받기. - UPSERT (나중에) —
INSERT ... ON CONFLICT(...) DO UPDATE.
Tip: Python 루프로 수천 row insert 하면 루프 전체를 한 transaction 으로 감싸 (
conn.execute('BEGIN') ... conn.commit()) 거나 executemany 써. 기본 'statement 당 transaction' 이 사람들이 SQLite 느리다고 오해하는 #1 이유야.