파이썬 SQLite 기초: 테이블 생성, 매개변수 쿼리와 연결 종료
파이썬의 sqlite3 모듈로 별도 DB 서버 없이 테이블 생성·저장·조회를 시작할 수 있습니다. 값은 문자열로 SQL에 붙이지 않고 매개변수로 전달하고, 커밋과 연결 종료를 구분해서 관리합니다.
설치와 적용 범위
sqlite3는 일반적인 Python 배포판에 포함된 표준 라이브러리 모듈입니다. 먼저 import sqlite3가 되는지 확인하세요. 여러 서버가 동시에 많은 쓰기 요청을 처리하는 시스템이라면 다른 DB 구성이 적합할 수 있습니다. SQLite가 파일 기반이라는 특성과 잠금 동작을 고려해야 합니다.
메모리 데이터베이스에서 먼저 실행하기
import sqlite3
con = sqlite3.connect(":memory:")
try:
con.execute("""CREATE TABLE tasks (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
done INTEGER NOT NULL DEFAULT 0
)""")
with con:
con.execute("INSERT INTO tasks(name) VALUES (?)", ("월간 보고서",))
con.execute("INSERT INTO tasks(name) VALUES (?)", ("파일 정리",))
rows = con.execute(
"SELECT id, name FROM tasks WHERE done = ? ORDER BY id", (0,)
).fetchall()
assert len(rows) == 2
print(rows)
finally:
con.close()
두 작업이 순서대로 출력됩니다. :memory:는 연결이 종료되면 사라지는 테스트 DB입니다. 파일로 보존하려면 명확한 경로를 지정하세요. 상대 경로는 프로그램의 실행 폴더에 따라 다른 DB 파일을 만들 수 있으므로 예약 실행 시 주의해야 합니다.
with con이 연결도 닫아 주나요?
연결 객체의 컨텍스트 관리자는 트랜잭션의 커밋·롤백에 관여하지만 연결을 자동으로 닫는 역할은 아닙니다. 위 코드는 finally에서 close를 호출합니다. 트랜잭션 세부 동작은 Python 버전과 autocommit 설정에 따라 달라질 수 있으므로 실제 환경의 설정을 확인하세요.
매개변수는 왜 사용하나요?
WHERE name = ?와 별도 매개변수를 사용하면 따옴표가 포함된 값도 SQL 코드와 분리해 처리할 수 있습니다. 문자열 서식으로 사용자 입력을 SQL에 끼워 넣지 마세요. 테이블명이나 열 이름 같은 SQL 식별자는 매개변수 값과 다르므로 허용 목록으로 관리해야 합니다.
파일을 바꾸기 전 확인할 것
운영 DB에 실험용 코드를 바로 실행하지 마세요. 백업, 스키마 변경 절차, 중복 키 처리 정책을 먼저 정하고 저장 후 조회 결과를 검증합니다. 대량 입력은 건별 커밋보다 작업 단위 트랜잭션을 검토하되 잠금 유지 시간도 함께 살펴야 합니다.
공식 자료: Python sqlite3 공식 문서. 관련 글: 중복 저장 제어, 저장 전 JSON 검증, 데이터 처리 가이드.
작성: 로그 · 2026-10-17 수정: 트랜잭션과 연결 종료를 구분하고 매개변수 기반 예제를 추가했습니다.
댓글
댓글 쓰기