26.Python SQLite로 데이터베이스 다루기: VSCode에서 시작하는 실전 가이드
저도 처음에 파이썬을 설치하고 내장 데이터베이스인 sqlite3 모듈을 불러오려는데, 원인 모를 에러가 계속 터져 밤새 가며 한참을 헤맸던 기억이 있습니다. 내 컴퓨터에 파이썬을 분명히 깔았는데 도대체 왜 안 된다는 건지, 소스 코드만 붙잡고 3시간 넘게 멍하니 모니터만 째려보았죠. 알고 보니 문제는 SQLite가 아니라, VS Code가 새로 설치한 파이썬이 아닌 예전 버전을 바라보고 있던 'PATH 환경변수 꼬임' 문제였습니다. VS Code 하단에서 파이썬 인터프리터 경로를 딱 맞춰주자마자, 단 1초 만에 .db 파일이 정상 생성되는 것을 보고 그제야 깊은 안도의 한숨을 쉬었습니다. 이 글을 읽는 분들은 저처럼 억울한 삽질로 시간을 낭비하지 않으시길 바라는 마음으로, 파이썬과 SQLite를 VS Code에서 완벽하게 연동하는 방법을 처음부터 차근차근 정리해 보겠습니다.
Python으로 데이터를 다루다 보면 언젠가는 반드시 데이터베이스라는 벽을 마주하게 됩니다. 엑셀 파일이나 CSV로 데이터를 관리하다가 양이 많아지면 속도가 느려지고 관리도 힘들어지는데, 이럴 때 가장 먼저 배우기 좋은 것이 바로 SQLite입니다. 별도의 서버 설치 없이 Python 표준 라이브러리만으로 바로 사용할 수 있기 때문에 VSCode 환경에서 실습하기에도 더할 나위 없이 좋습니다. 이번 글에서는 Python과 SQLite를 활용해 데이터베이스의 기본기를 다지는 방법을 처음부터 차근차근 살펴보겠습니다.
SQLite란 무엇인가
서버 없이 동작하는 가벼운 데이터베이스
SQLite는 흔히 생각하는 MySQL이나 PostgreSQL 같은 서버형 데이터베이스와는 성격이 조금 다릅니다. 별도의 서버 프로세스를 띄우지 않고, 데이터베이스 전체가 하나의 파일(.db)로 존재합니다. 비유하자면 회사 전체가 사용하는 대형 창고(서버형 DB)와, 내 방 책상 서랍 안에 있는 개인 수납함(SQLite) 정도의 차이라고 볼 수 있습니다. 규모는 작지만 필요한 순간에 즉시 꺼내 쓸 수 있다는 점에서 매우 실용적입니다.
Python에는 sqlite3라는 모듈이 표준 라이브러리로 내장되어 있어서, 별도의 설치 과정 없이 바로 import해서 사용할 수 있다는 것도 큰 장점입니다.
언제 SQLite를 선택해야 할까
- 소규모 프로젝트나 프로토타입 개발
- 로컬 환경에서 데이터를 저장하고 분석해야 할 때
- 별도의 DB 서버를 구축하기 부담스러운 개인 프로젝트
- 모바일 앱이나 데스크톱 애플리케이션의 내장 데이터 저장소
반대로 다수의 사용자가 동시에 접속하는 대규모 서비스라면 SQLite보다는 서버형 데이터베이스가 더 적합합니다.
VSCode 환경에서 SQLite 준비하기
개발 환경 설정
VSCode에서 Python과 SQLite를 함께 사용하기 위해서는 몇 가지 준비가 필요합니다. 먼저 Python 확장 프로그램이 설치되어 있어야 하고, SQLite 파일을 직접 눈으로 확인하고 싶다면 "SQLite Viewer"와 같은 확장 프로그램을 추가로 설치하는 것을 추천합니다.
이 확장 프로그램을 설치하면 .db 파일을 더블클릭했을 때 표 형태로 데이터를 바로 확인할 수 있어, 마치 엑셀 파일을 열어보듯 편리하게 데이터베이스 내용을 검토할 수 있습니다.
첫 데이터베이스 파일 생성하기
Python 코드로 SQLite 데이터베이스에 연결하는 방법은 매우 간단합니다.
import sqlite3
# 데이터베이스 파일 연결 (없으면 자동 생성)
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()
print("데이터베이스 연결 성공!")
conn.close()
위 코드를 VSCode에서 실행하면 프로젝트 폴더 안에 my_database.db 파일이 새로 생성되는 것을 확인할 수 있습니다.
테이블 생성과 데이터 조작 실습
테이블 만들기
데이터베이스를 하나의 건물이라고 생각하면, 테이블은 그 건물 안에 있는 각각의 방이라고 할 수 있습니다. 방마다 용도가 다르듯, 테이블마다 저장하는 데이터의 종류와 구조가 다릅니다.
import sqlite3
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
)
''')
conn.commit()
conn.close()
데이터 삽입, 조회, 수정, 삭제
가장 기본이 되는 CRUD(Create, Read, Update, Delete) 작업은 다음과 같이 처리합니다.
import sqlite3
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()
# 데이터 삽입
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("홍길동", 28))
conn.commit()
# 데이터 조회
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
여기서 반드시 기억해야 할 점은 ? 플레이스홀더를 사용해서 값을 전달해야 한다는 것입니다. 문자열을 직접 조합해서 쿼리를 작성하면 SQL 인젝션이라는 보안 취약점이 발생할 수 있으므로, 이 방식은 습관처럼 지키는 것이 좋습니다.
자주 발생하는 오류와 해결 방법
초보자들이 자주 마주치는 오류 중 하나는 conn.commit()을 빠뜨려서 데이터가 실제로 저장되지 않는 경우입니다. 마치 문서를 작성만 하고 저장 버튼을 누르지 않은 것과 같아서, 프로그램을 종료하면 변경 사항이 모두 사라지고 맙니다. 데이터를 삽입하거나 수정, 삭제한 뒤에는 항상 commit을 호출하는 습관을 들이는 것이 중요합니다.
실전 활용 팁
with 구문으로 안전하게 연결 관리하기
연결을 열고 닫는 것을 매번 신경 쓰기보다는 with 구문을 활용하면 코드가 훨씬 깔끔해집니다.
import sqlite3
with sqlite3.connect('my_database.db') as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())
데이터 조회 결과를 딕셔너리 형태로 받기
기본적으로 조회 결과는 튜플 형태로 반환되지만, row_factory를 설정하면 컬럼명으로 값을 접근할 수 있어 가독성이 훨씬 좋아집니다.
conn = sqlite3.connect('my_database.db')
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
print(row["name"], row["age"])
마무리
지금까지 Python과 SQLite를 활용해 데이터베이스를 다루는 기본기를 살펴봤습니다. VSCode라는 익숙한 환경에서 실습하다 보면 데이터베이스라는 개념이 생각보다 훨씬 친근하게 느껴질 것입니다.
핵심 내용을 정리하면 다음과 같습니다.
- SQLite는 별도의 서버 없이 파일 하나로 동작하는 가벼운 데이터베이스입니다
- Python은
sqlite3모듈을 표준으로 내장하고 있어 바로 사용 가능합니다 - 테이블 생성, 삽입, 조회, 수정, 삭제의 기본 흐름을 익히는 것이 첫걸음입니다
?플레이스홀더 사용과commit()호출은 절대 잊지 말아야 할 습관입니다with구문과row_factory를 활용하면 더 안전하고 가독성 좋은 코드를 작성할 수 있습니다
다음 글에서는 SQLite에서 한 단계 나아가, 여러 테이블을 연결해서 사용하는 관계형 데이터 설계 방법에 대해 다뤄보도록 하겠습니다.
댓글
댓글 쓰기