sqlite3.connect()를 호출하면 DB와의 연결(Connection) 객체가 생성됩니다.conn)는 데이터베이스와의 세션을 의미하며,mydb.db) 또는 메모리(:memory:)와 연결 상태를 유지합니다.👉 역할
cursor() 메서드를 통해 커서 생성conn.close() 필요conn.cursor()를 호출하면 SQL 명령을 실행할 수 있는 인터페이스인 커서(cursor)가 나옵니다.👉 역할
execute())fetchone(), fetchall())execute("SELECT * FROM users WHERE id=?", (1,)))cursor.execute(sql문)은 SQL 명령을 DB에 전달하고 실행합니다.fetchone(), fetchall()로 결과 가져옴conn.commit() 해야 실제 반영됨.psycopg2는 PostgreSQL 전용 Python 라이브러리입니다.
sqlite3와 사용 방식이 매우 비슷하지만 차이점이 있어요.
| 특징 | sqlite3 (내장) | psycopg2 (외부 설치 필요) |
|---|---|---|
| 지원 DB | SQLite (파일 기반) | PostgreSQL (서버 기반) |
| 설치 | ❌ (Python에 기본 내장) | ✅ (pip install psycopg2) 필요 |
| 연결 방식 | 파일(.db) 또는 메모리 | DB 서버(host, port) 필요 |
| 용도 | 로컬 테스트, 연습, 소규모 앱 | 실제 서비스, 서버 DB 연동 |
| 사용법 | 비슷 (conn, cursor, execute) | 비슷 (conn, cursor, execute) |
💡 즉, sqlite3와 psycopg2는 인터페이스가 거의 동일하지만
sqlite3 → 서버 없이 파일만으로 동작psycopg2 → PostgreSQL 서버가 필요sqlite3와 psycopg2는 사용법이 매우 비슷합니다.
아래 예제는 같은 작업(테이블 생성 → 데이터 삽입 → 조회)을 각각의 라이브러리에서 구현한 코드입니다.
users 테이블 생성 (id, name)import sqlite3
# 1. DB 연결 (파일 기반)
conn = sqlite3.connect("mydb.db")
cursor = conn.cursor()
# 2. 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT
)
""")
# 3. 데이터 삽입
cursor.execute("INSERT INTO users (name) VALUES (?)", ("Alice",))
conn.commit() # ✅ 변경사항 저장
# 4. 데이터 조회
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 5. 연결 종료
conn.close()
import psycopg2
# 1. PostgreSQL 서버 연결
conn = psycopg2.connect(
host="localhost",
dbname="mydb",
user="postgres",
password="password",
port=5432
)
cursor = conn.cursor()
# 2. 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
)
""")
# 3. 데이터 삽입
cursor.execute("INSERT INTO users (name) VALUES (%s)", ("Alice",))
conn.commit() # ✅ 변경사항 저장
# 4. 데이터 조회
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 5. 연결 종료
cursor.close()
conn.close()
| 비교 항목 | sqlite3 | psycopg2 |
|---|---|---|
| DB 연결 | sqlite3.connect("mydb.db") (파일) | psycopg2.connect(host=..., dbname=...) (서버) |
| SQL 파라미터 바인딩 | ? (물음표) | %s (포맷) |
| 테이블 기본키 | INTEGER PRIMARY KEY | SERIAL PRIMARY KEY |
| 설치 필요 여부 | ❌ (내장) | ✅ (pip install psycopg2) 필요 |
💡 즉, 코드 구조는 거의 동일하지만
psycopg2는 서버 연결 정보가 필요하고, 파라미터 바인딩 방식만 조금 다릅니다.