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
는 서버 연결 정보가 필요하고, 파라미터 바인딩 방식만 조금 다릅니다.