가장 흔한 write
INSERT는 단순해 보이지만 알아둘 모양이 몇 가지 있어.
- Positional —
INSERT INTO t VALUES (...). 컬럼 순서가CREATE TABLE에 적힌 순서를 그대로 따라가. 잘 깨져. - 컬럼 이름 명시 —
INSERT INTO t(a, b) VALUES (...). 항상 이걸 써. schema가 바뀌어도 버텨. - Multi-row —
INSERT INTO t(a) VALUES (1), (2), (3). transaction 하나로 끝나서, single-row insert를 N번 하는 것보다 훨씬 빨라. - INSERT ... SELECT —
INSERT INTO t(a) SELECT x FROM other. 다른 테이블에서 통째로 옮겨올 때. - RETURNING — 3.35부터 돼.
INSERT ... RETURNING id로 왕복 한 번 더 하지 않고 방금 생긴 값을 바로 받아. - UPSERT —
INSERT ... ON CONFLICT(...) DO UPDATE. 뒤에서 제대로 다뤄.
Tip: Python 루프로 수천 row를 넣을 거면 루프 전체를 transaction 하나로 감싸거나(
conn.execute('BEGIN') … conn.commit()) executemany를 써. 'statement마다 transaction 하나'라는 기본값이 사람들이 SQLite를 느리다고 오해하는 첫 번째 이유야.