파이썬 프로토콜은 인터페이스보다 유연한 개념이다. 꼭 어떤 클래스를 상속하지 않아도, 필요한 메서드만 구현하면 되는데 이를 'Duck Typing"이라 한다.
__iter__()
, __next__()
메서드 구현 → 반복문에서 사용 가능__contains__()
, __getitem__()
등 → in
연산자, 인덱싱 지원__enter__()
, __exit__()
메서드 구현 → with
문에서 사용 가능with
문을 사용할 수 있도록 하는 프로토콜이다.with
문에 진입할 때 __enter__()
메서드가 호출되고, 블록이 끝나거나 예외 발생 시 __exit__()
메서드가 호출된다.class MyResource:
def __enter__(self):
# 자원 할당 또는 초기화
return self
def __exit__(self, exc_type, exc_value, traceback):
# 자원 해제 또는 정리
pass
with MyResource() as resource:
# 자원 사용 코드
pass
psycopg2
는 파이썬에서 PostgreSQL 데이터베이스와 연결하기 위한 라이브러리이다.connection
객체는 PostgreSQL 서버와의 연결 상태를 나타내며, SQL 쿼리를 실행하려면 cursor
객체를 생성해야 한다.connection
은 DB 연결 자체를 관리하면서 commit()
, rollback()
, close()
등을 수행한다.
cursor
의 경우, SQL 문장을 실행하는 실제 작업자이다. execute()
, fetchall()
, close()
등이 있다.
import psycopg2
conn = psycopg2.connect(host='localhost', dbname='testdb', user='user', password='password')
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
conn = psycopg2.connect(...)
cursor = conn.cursor()
try:
cursor.execute(...)
conn.commit()
except:
conn.rollback()
finally:
cursor.close()
conn.close()
connection
객체는 데이터베이스와의 통신 파이프라인 역할을 하며, cursor
는 SQL 쿼리 실행을 위한 도구이다.cursor.execute()
는 SQL 쿼리를 데이터베이스에 전달하여 실행하는 메서드이다.cursor.execute("SELECT * FROM project WHERE id = %s", (project_id,))
fetchone()
, fetchall()
등으로 가져올 수 있다.psycopg2.connect(..., autocommit=True)
옵션을 주면, conn.commit()
안 해도 바로 반영된다.
그러나 데이터를 안전하게 다루려면 autocommit=False(default)
로 두고,
작업이 끝난 후 명시적으로 commit()
하는 게 일반적이다.
psycopg2에서는 autocommit 설정도 가능하지만, 보통 명시적으로 commit/rollback을 사용하는 것이 더 안전하다.
이상으로 파이썬 프로토콜, context manager, 그리고 psycopg2의 connection 객체와 execute 메서드에 대한 핵심 내용을 정리하였다.