mysql이나 postgresql을 사용할 때 데이터베이스에 연결을 하기 위해서는 커넥터를 사용해야 한다.
mysql에서는 pymysql, postgresql에서는 psycopg2가 대표적인 커넥터이다.
오늘은 이러한 파이썬 DB 커넥터의 간단한 사용방법과 그 과정에서 헷갈릴 수 있는 부분을 정리해보려 한다.
간단한 사용법
이 포스팅에서는 psycopg2를 이용하여 postgresql에 접근하는 방법에 대해 설명하려 한다.
그 동안 pymysql을 사용해보기는 했지만 postgresql을 사용해본 적이 없기도 하고, 글을 작성하면서 나 또한
postgresql과 psycopg2를 사용하는 방법을 숙지하려고 한다.
우선 psycopg2가 설치되어있다는 가정하에(설치는 간단하게 pip install psycopg2로 할 수 있다) 시작한다.
연결 - connect(), cursor()
먼저 DB와 연결하는 과정이 필요하다.
conn = psycopg2.connect(host=host, user=user, password=password,
dbname=database, port=port)
connect()를 통해 DB와 연결이 완료되었다면 이제 cursor()를 통해 연결에 대한 인스턴스를 생성하고
해당 인스턴스로 DB를 실질적으로 조종한다.
connect 객체는 연결된 DB를 동작시키는 역할을 하고
cursor 객체는 실질적으로 DB에 쿼리문을 수행하고, 결과를 가져오는 역할을 한다.
cursor = conn.cursor()
조작 - execute(), commit()
cursor.execute("CREATE TABLE User(Name text, PhoneNum text);")
conn.commit()
DB와 연결을 하였다면 DB에 쿼리문을 실행하는 작업을 해야한다.
여기서 사용하는 명령어가 execute()이다.
execute() 명령어를 통해 실행하고자 하는 쿼리문을 DB 서버에 보낸다.
삽입, 갱신, 삭제 등의 작업이 끝났다면 conn 객체의 commit()을 통해서 데이터를 commit한다.
여기서 나는 execute와 commit의 차이를 정확하게 파악하지 못했었다.
너무 깊게 생각하지 않고 명령어 자체를 보면 그 차이를 쉽게 이해할 수 있다.
execute는 말 그대로 쿼리문을 실행하는 것이다. 하지만 실제로 해당 트랜잭션이 수행되려면
commit을 통해 DB에 반영해야 한다.
연결 해제 - close()
conn.close()
트랜잭션이 모두 완료되었다면 이제 DB와의 연결을 끊어야 한다.
close()를 통해 연결을 끊을 수 있고, 해당 작업을 하지 않으면 필요없는 연결이 유지되어
리소스를 낭비할 수 있다.
close()를 사용하는 것이 귀찮다면 with문을 이용할 수도 있다.
with conn.cursor() as curs:
sql = "INSERT INTO customer(name,category,region) VALUES (%s, %s, %s)"
curs.execute(sql, ('이광수', 1, '서울'))
conn.commit()
참고
'개발 > 개발 지식' 카테고리의 다른 글
asyncio 완전 정복 - 1 (0) | 2022.07.23 |
---|---|
Anaconda와 JupyterLab 알아보기 (0) | 2022.07.10 |
NFS란? 정의/장단점 (0) | 2022.04.04 |
REST vs Websocket - 차이/작동방식/적절한 비유 (1) | 2022.03.29 |
Vagrant 어떤 용도일까? 정의/사용이유/Docker와 비교 (0) | 2022.03.23 |