PostgreSQL과 Python SDK

nTels_Tarzan·2025년 4월 23일
post-thumbnail

Python 연동하기 (psycopg2)


1. 사전 준비

라이브러리 설치

pip install psycopg2-binary

psycopg2 대신 psycopg2-binary는 휠로 배포되어 컴파일 없이 설치 가능합니다.


2. PostgreSQL 연결

import psycopg2

conn = psycopg2.connect(
    host="localhost",
    port=5432,
    database="your_db",
    user="your_user",
    password="your_password"
)
  • 연결 정보를 정확히 입력
  • 연결이 완료되면 conn 객체를 통해 쿼리 실행 가능

3. 기본 쿼리 실행

cur = conn.cursor()

cur.execute("SELECT version();")
version = cur.fetchone()
print("PostgreSQL 버전:", version[0])

cur.close()
conn.close()

4. INSERT 예제

conn = psycopg2.connect(...)
cur = conn.cursor()

cur.execute("""
    INSERT INTO users (name, email)
    VALUES (%s, %s)
""", ("Alice", "alice@example.com"))

conn.commit()
cur.close()
conn.close()
  • 변수를 직접 문자열로 넣지 마세요 → SQL Injection 위험
  • execute()에서 %s + 튜플 전달로 안전하게 처리

5. SELECT 예제

cur = conn.cursor()
cur.execute("SELECT id, name FROM users")
rows = cur.fetchall()

for row in rows:
    print(f"ID: {row[0]}, Name: {row[1]}")

6. UPDATE & DELETE 예제

# UPDATE
cur.execute("UPDATE users SET name = %s WHERE id = %s", ("Bob", 2))

# DELETE
cur.execute("DELETE FROM users WHERE id = %s", (2,))

conn.commit()

7. 커넥션 풀 사용 (옵션)

많은 요청을 처리할 경우 커넥션 풀 사용이 유리합니다.

from psycopg2 import pool

pg_pool = pool.SimpleConnectionPool(1, 10,
    user="your_user",
    password="your_password",
    host="localhost",
    port=5432,
    database="your_db"
)

conn = pg_pool.getconn()
# 사용 후 반납
pg_pool.putconn(conn)

8. 예외 처리

try:
    conn = psycopg2.connect(...)
    cur = conn.cursor()
    cur.execute("YOUR QUERY")
    conn.commit()
except Exception as e:
    print("에러 발생:", e)
    conn.rollback()
finally:
    cur.close()
    conn.close()

9. 실습 예제: 사용자 추가 → 전체 목록 조회

def add_user(name, email):
    with psycopg2.connect(...) as conn:
        with conn.cursor() as cur:
            cur.execute("INSERT INTO users (name, email) VALUES (%s, %s)", (name, email))

def list_users():
    with psycopg2.connect(...) as conn:
        with conn.cursor() as cur:
            cur.execute("SELECT id, name, email FROM users")
            return cur.fetchall()

add_user("Charlie", "charlie@example.com")
for user in list_users():
    print(user)

profile
안녕하세요. 엔텔스 TarzanDB 공식계정입니다.

0개의 댓글