Post thumbnail

Python과 PostgreSQL 연동 -> Psycopg2

· by 박승재

Psycopg2Pyhton에서 사용되는 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 함수를 호출합니다.

참고: Python 으로 Postgresql 데이타베이스 연동 간단 리뷰