Python을 이용하여 PostgreSQL을 사용하는 방법에 대해 알아본다.
PostgreSQL의 psql에서 SQL과 JOIN을 사용하는 방법에 대해 다뤘다.
해당 내용은 다음 포스팅을 참고한다.
Docker를 사용하여 PostgreSQL을 설정하는 방법은 다음 포스팅을 참고한다.
그러나 매번 수작업으로 CRUD (Create, Read, Update, Delete)를 할 수 없다.
결국 프로그래밍으로 해결해야 한다. 편의상 파이썬을 중심으로 진행한다.
psycopg2에서 제공하는 기능들에 대한 간단한 사용법에 대해 살펴본다.
그리고 각 기능들을 조합한 CRUD 클래스를 구현하는 방법을 정리한다.
psycopg2 소개
Python에서 PostgreSQL을 사용하기 위해서는 psycopg2 라이브러리를 사용한다.
해당 라이브러리의 공식 사이트와 GitHub은 다음과 같다.
2022년 3월 22일 현재 최신 버전은 2.9.3이고 LGPL 라이선스를 따른다.
응용프로그램에 LGPL을 따르는 라이브러리를 정적 또는 동적으로 링크하여 사용하더라도 소스코드 공개 의무가 없다.
psycopg2의 코드를 직접 수정하지 않는 이상 사용에 문제는 없다.
LGPL에 대한 자세한 내용은 아래 블로그를 참고한다.
psycopg2의 경우 유니코드와 Python3를 모두 원활하게 지원하므로 가장 널리 쓰이는 라이브러리 중 하나이다.
JDBC와 같은 Database 커넥터이기 때문에 다음과 같은 기능을 제공한다.
-
Database 연결과 해제
-
SQL 실행과 트랜잭션 발생
-
결과 반환
psycopg2 설치
psycopg2와 psycopg2-binary가 있는데 psycopg2-binary를 사용한다.
psycopg2와 psycopg2-binary의 차이점
차이점에 대해 이해한 내용 중심으로 작성하고, 자세한 사항은 아래 문서를 참고한다.
psycopg2-binary
바이너리 형태인 whl 패키지로 배포되어 pip로 설치 가능하다.
단순히 라이브러리를 로드하여 사용하거나, 해당 함수들을 사용하여 래핑(Wrapping)하는 경우 권장된다.
특정 라이브러리를 10개 프로그램에 직접 임포트하여 사용하는 경우를 가정해보자.
해당 라이브러리의 함수명이 바뀌거나 기능이 제거되면, 10개 프로그램을 모두 수정해야 한다.
그러나 해당 라이브러리를 래핑해서 사용하고, 10개 프로그램이 래핑한 라이브러리를 사용하면 훨씬 간단해진다.
래핑한 라이브러리만 수정하고, 나머지 10개 프로그램은 래핑한 라이브러리의 의존성을 신규 버전으로 바꿔주기만 하면 된다.
즉, 외부 라이브러리의 변경 사항에 대해 유연하게 대처할 수 있다.
외부 라이브러리를 래핑 (Wrapping)하는 이유는 아래 문서를 참고한다.
psycopg2
pip로 설치 가능하지만 whl 패키지가 아닌 소스코드 수준으로 설치된다.
PostgreSQL이 없는 환경에서 설치하면 다음과 같은 오류가 출력된다.
로컬에 PostgreSQL이 설치되어 있는 환경이거나, pg_config 파일을 생성하고 재빌드를 수행해서 사용해야 한다
소스코드 수준으로 사용하면 보다 세밀한 설정이나 수정이 가능하다는 장점이 있다.
그러나 그 정도로 사용할 일이 있을지는 의문이다.
pip에서 제공하는 postgres 라이브러리를 보면 psycopg2-binary에 의존성이 있는 것으로 확인된다.
psycopg2-binary를 사용해도 무방할 것으로 판단된다.
pip로 psycopg2-binary 설치하기
아래 명령을 사용하면 psycopg2-binary를 설치할 수 있다.
$ pip install psycopg2-binary
pip 환경 설정은 아래 포스팅의 pip 클라이언트 설정 부분을 참고한다.
아나콘다를 이용하여 개발을 위한 가상 환경을 사용하고자 하는 경우 아래 포스팅을 참고한다.
'::: IT인터넷 :::' 카테고리의 다른 글
psycopg2로 PostgreSQL CRUD 클래스 구현하기 (125) | 2022.06.02 |
---|---|
psycopg2으로 PostgreSQL 사용하기 (0) | 2022.05.30 |
MinIO 파이썬 클라이언트에서 자체 서명 인증서 사용하기 (0) | 2022.05.24 |
PostgreSQL의 dblink로 원격 Database 사용하기 (0) | 2022.05.23 |
PostgreSQL의 JOIN 사용하기 (0) | 2022.05.19 |