파이썬을 백엔드로 사용하는 프로젝트를 진행한다면, DB 연결 및 쿼리 실행 또한 파이썬기반으로 진행된다.
이 글에서는 파이썬에서 Postgresql의 DataBase를 연결하고, 쿼리를 실행하는 코드 샘플까지 설명드리려합니다.
파이썬에서 Postgresql를 다루기 위해서는 추가 라이브러리 설치가 필요합니다.
아래 명령어를 통해 psycopg2라이브러리를 설치해줍니다.
pip install psycopg2
DB를 연결하기 위해서는 psycopg2.connect() 함수를 사용하여 DB에 접속합니다.
파라미터는 4개를 사용하며, 파라미터에 대한 설명은 아래와 같습니다.
host : DB가 실행 중인 서버 ip, 로컬일 경우 localhost 사용
database : DB 이름
user : 본인이 사용하는 DB 접속 계정 이름
password : DB 접속 계정 비밀번호
# 데이터베이스 연결 설정
def dbConnection():
conn = psycopg2.connect(
host="localhost",
database="db_name",
user="username",
password="password"
)
return conn
우선 쿼리를 실행하기 위해서는 선언한 함수로 데이터베이스를 연결한 객체와 쿼리를 실행하기 위한 cursor 객체가 필요합니다.
두 객체는 다음 코드를 통해 선언됩니다.
conn = dbConnection()
cur = conn.cursor()
이제 cur 객체를 통해 쿼리를 실행하고 실행한 값을 파이썬에서 사용할 수 있습니다.
cur.execute("SELECT username, email, phone_number FROM users WHERE login_id = %s", (login_id))
user = cur.fetchone()
cur.close()
conn.close()
예를 들어서 users 테이블에서 username, email, phone_number 컬럼을 읽어오고싶고, 조건으로 파이썬에서 선언한 login_id로 필터링을 하고싶을 때 입니다.
cursor객체를 사용하여 execute 메소드를 사용하여 쿼리를 실행할 수 있고, login_id = %s, (login_id)를 통해 파이썬에서 선언한 변수를 사용할 수 있습니다.
여기서 가장 첫 번째 행의 값을 가져오고 싶다면
user = cur.fetchone()을 사용해서 필터링된 유저 정보를 얻을 수 있습니다.
cur.close()
conn.close()
실행할 쿼리가 끝났다면 DB와의 연결을 끊어줘야합니다. close 메소드를 사용하여 커서와 연결 객체 모두 종료시켜주면 모든 절차가 마무리됩니다.
만약 close를 시켜주지 않으면 협업 시 문제가 발생할 수 있습니다.
만약 INSERT문을 통해 파이썬에서 선언한 값을 DB로 저장하는 케이스는 아래 예시를 통해 진행됩니다.
cur.execute("INSERT INTO A (id, name) VALUES (%s, %s)", (user_id, file_name))
conn.commit()
cur.close()
conn.close()
쿼리는 INSERT문을 통해 파이썬에서 선언한 값을 A 테이블에 저장하는 쿼리 샘플이다.
SELECT문과 동일하게 %s를 통해 문자열을 받는다.
하지만 여기서 추가된 것이 있는데
conn.commit()이다.
commit을 하는 이유는 DB 테이블의 내용이 변경되었기 때문이다.
INSERT, UPDATE, DELETE등과 같이 테이블의 내용에 영향을 줬다면 commit을 통해 실행 결과를 반드시 저장해줘야한다.
보통 데이터 분석에서는 SELECT가 메인으로 사용될 것이고, 웹이라면 CRUD 구현이기 때문에 INSERT, SELECT, UPDATE, DELETE를 전부 사용할 것이다.
이상으로 Python 백엔드에서 Postgresql 연결 및 간단한 쿼리 실행 방법이었습니다.