[파이썬] Psycopg2에서 Query parameters 활용 팁

오늘은 Python에서 PostgreSQL 데이터베이스를 다룰 때 자주 사용되는 psycopg2 라이브러리의 Query parameters 활용 팁에 대해 알아보겠습니다. psycopg2는 PostgreSQL 데이터베이스에 연결하고 쿼리를 실행하는 데 사용되는 Python 라이브러리입니다.

Query parameters는 쿼리에 변수를 넣을 때 사용되며, 이를 통해 쿼리의 재사용성과 보안을 높일 수 있습니다. psycopg2에서는 쿼리에 인자로 전달되는 변수를 %s로 표시하여 나중에 값을 전달할 수 있습니다.

1. 단순 쿼리 매개변수

가장 기본적인 형태의 query parameter 사용법은 다음과 같습니다.

import psycopg2

conn = psycopg2.connect(database="mydatabase", user="myuser", password="mypassword")
cursor = conn.cursor()

name = "John"
age = 30

cursor.execute("SELECT * FROM users WHERE name = %s AND age = %s", (name, age))

위의 예제에서 nameage 변수는 %s에 대응하여 query에 전달되며, execute 함수의 두 번째 인자로 변수를 튜플 형태로 전달합니다.

2. 딕셔너리를 이용한 쿼리 매개변수

psycopg2.extras 모듈의 execute_values 함수를 사용하면 딕셔너리 형태로 쿼리 매개변수를 전달할 수 있습니다.

import psycopg2
from psycopg2 import extras

conn = psycopg2.connect(database="mydatabase", user="myuser", password="mypassword")
cursor = conn.cursor()

params = {
    'name': 'Alice',
    'age': 25
}

query = "INSERT INTO users (name, age) VALUES (%(name)s, %(age)s)"
extras.execute_values(cursor, query, [params])

위의 예제에서는 params 딕셔너리를 이용하여 %() 안에 쿼리 매개변수를 지정합니다. extra.execute_values 함수는 쿼리의 %() 부분을 딕셔너리의 키와 값으로 대체하여 실행합니다.

3. NamedTuple을 이용한 쿼리 매개변수

NamedTuple을 이용하면 query parameters를 더 간단하게 처리할 수 있습니다. psycopg2.extras 모듈의 execute_values 함수와 익명 클래스를 사용하는 예시를 살펴보겠습니다.

import psycopg2
from psycopg2 import extras
from collections import namedtuple

conn = psycopg2.connect(database="mydatabase", user="myuser", password="mypassword")
cursor = conn.cursor()

User = namedtuple('User', ['name', 'age'])
users = [
    User(name='Bob', age=30),
    User(name='Charlie', age=35)
]

query = "INSERT INTO users (name, age) VALUES %s"
extras.execute_values(cursor, query, [tuple(user) for user in users])

위의 예제에서는 NamedTuple인 User를 이용하여 users 리스트를 정의합니다. 그리고 tuple(user)를 통해 NamedTuple을 튜플로 변환하여 execute_values 함수에 전달합니다. 이를 통해 간단하게 쿼리 매개변수를 처리할 수 있습니다.

psycopg2의 Query parameters 활용 팁에 대해 알아보았습니다. Query parameters를 적절히 활용하면 쿼리의 가독성과 보안을 높일 수 있으며, 디버깅과 유지보수가 용이해집니다. psycopg2 라이브러리를 사용하여 Python에서 PostgreSQL 데이터베이스를 다룰 때는 Query parameters 활용에 주의해보세요!