Python에서 PostgreSQL 데이터베이스를 다룰 때 널리 쓰이는 라이브러리가 바로 psycopg2
입니다.
데이터베이스와의 상호작용 과정을 이해하기 쉽게 레스토랑에서 주문하고 식사하는 과정에 비유해 보겠습니다.
connect()
/ conn
(연결): 레스토랑에 들어가서 내 테이블에 앉는 것cursor()
/ cur
(커서): 웨이터를 부르는 것. 모든 주문은 웨이터를 통해 전달된다.execute()
(실행): 웨이터에게 “파스타 하나 주세요”라고 주문하는 것fetchall()
(결과 가져오기): 웨이터가 음식을 가져오는 것commit()
(확정): 음식을 다 먹고 계산하는 것rollback()
(취소): 잘못 주문해서 “주문 취소할게요”라고 하는 것close()
(종료): 식사를 마치고 레스토랑에서 나오는 것psycopg2.connect()
와 conn
(연결 객체)conn
객체가 반환된다.import psycopg2
# 데이터베이스 연결
conn = psycopg2.connect(
host="localhost",
database="testdb",
user="postgres",
password="password"
)
conn.cursor()
와 cur
(커서 객체)cur = conn.cursor()
cur.execute(query, params)
(쿼리 실행)# 테이블 생성
cur.execute("""
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name TEXT,
age INT
)
""")
# 데이터 삽입 (파라미터 바인딩)
cur.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Alice", 25))
fetchall()
/ fetchone()
/ fetchmany()
cur.execute("SELECT * FROM users")
rows = cur.fetchall()
for row in rows:
print(row)
conn.commit()
(트랜잭션 확정)commit()
을 호출하지 않으면 DB에는 반영되지 않는다.conn.commit()
conn.rollback()
(트랜잭션 취소)commit()
전에 실행된 변경 사항을 모두 취소한다. 주로 에러 발생 시 사용된다.try:
cur.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Bob", "not_a_number"))
conn.commit()
except Exception as e:
print("에러 발생:", e)
conn.rollback()
cur.close()
와 conn.close()
(자원 해제)cur.close()
conn.close()
import psycopg2
try:
# 연결
conn = psycopg2.connect(
host="localhost",
database="testdb",
user="postgres",
password="password"
)
cur = conn.cursor()
# 테이블 생성
cur.execute("""
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name TEXT,
age INT
)
""")
# 데이터 삽입
cur.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Alice", 25))
# 조회
cur.execute("SELECT * FROM users")
rows = cur.fetchall()
for row in rows:
print(row)
# 확정
conn.commit()
except Exception as e:
print("에러 발생:", e)
conn.rollback()
finally:
# 자원 해제
if cur:
cur.close()
if conn:
conn.close()
connect()
→ 데이터베이스 연결 (테이블에 앉기)cursor()
→ 커서 생성 (웨이터 부르기)execute()
→ SQL 실행 (주문하기)fetch*()
→ 결과 가져오기 (음식 받기)commit()
→ 변경 사항 확정 (계산하기)rollback()
→ 변경 사항 취소 (주문 취소)close()
→ 자원 해제 (퇴장하기)psycopg2
는 PostgreSQL과 상호작용하기 위한 표준적인 도구이며, 올바르게 commit
, rollback
, close
를 사용하는 것이 안정적인 데이터베이스 프로그래밍의 핵심입니다.