Python과 PostgreSQL 연동 -> Psycopg2
Psycopg2은 Pyhton에서 사용되는 PostgreSQL DB 어댑터로, Python DB API 2.0 사양을 완전히 구현했습니다.
libpq 위에서 동작하며, 멀티스레드 프로그램에서 스레드 안정성을 가지고 효율적인 자원 관리가 가능합니다.
Psycopg2는 PyPI로 설치 가능합니다.
$ pip install psycopg2-binary
psycopg2-binary
는 Python과 PostgreSQL 빌드 의존성 설치가 필요하지 않은 패키지입니다.
설치가 끝나면 connect
함수를 이용해 DB에 연결합니다.
import psycopg2
conn = psycopg2.connect(dbname='db', user='user', password='pw1234', host='localhost', port=5432)
cur = conn.cursor()
cur.close()
conn.close()
host
의 기본값은 UNIX 소켓이며, port
의 기본값은 5432
입니다.
Python의 with
문법을 이용하면, close
함수 호출을 생략할 수 있습니다.
with psycopg2.connect(dbname='db', user='user', password='pw1234', host='localhost', port=5432) as conn:
with conn.cursor() as cur:
# ...
참고: 파이썬 with 정리
execute
함수를 이용해서 SQL을 실행하고, fetch
류의 함수를 이용해 결과를 가져올 수 있습니다.
cur.execute('SELECT 1')
print(cur.fetchone()) # (1,)
fetchone
fetchmany
fetchall
변수 값을 이용해 SQL문을 생성하는 경우에는 %
을 이용해 값을 넣어줍니다.
cur.execute("INSERT INTO num1 VALUES (%s)", (1,))
cur.execute("INSERT INTO num2 VALUES (%s, %s)", (10, 20))
필요한 값이 1개이더라도
()
으로 감싸줘야 합니다.이때 튜플 자료형이기 때문에 마지막 콤마(
,
)를 생략해서는 안 됩니다.
SQL을 이용해 DB를 수정한 이후에는 commit
함수를 호출해 수정사항을 저장해야 합니다.
conn.commit()
만약 with
문을 이용해서 연결을 관리하고 있다면, with
가 정상적으로 종료되었을 때 자동으로 commit
을 호출합니다.
참고: Psycopg2 connection class - commit
rollback
함수는 반대로 수정사항을 되돌리는 함수입니다.
마찬가지로 with
를 사용하는 중이라면, with
에서 오류가 발생했을 때는 자동으로 rollback
함수를 호출합니다.