SQL이 실제로 도는 자리
SQL statement는 전부 cursor를 거쳐서 돌아. conn.execute(sql, params)를 부르면 cursor가 하나 나와. 부를 때마다 새로 만들어져. row를 읽는 방법은 넷이야.
cursor.fetchone()— 다음 row를 tuple로 주고, 없으면 None을 줘.cursor.fetchmany(n)— 최대 n개까지 tuple 목록으로 줘.cursor.fetchall()— 남은 걸 전부 줘. 양이 어마어마할 수 있으니 조심해.- Iteration —
for row in cursor:는 필요할 때마다 하나씩 흘려줘. 결과가 클 때는 이게 정석이야.
Tip: 기본은 iteration으로 잡아. 백만 row짜리 query에
fetchall()을 쓰면 tuple 백만 개를 한꺼번에 메모리에 올려. iterator는 한 번에 하나씩만 들고 있어.