[파이썬] Psycopg2에서 동적 SQL 쿼리 생성

Psycopg2는 파이썬에서 PostgreSQL 데이터베이스를 연결하고 작업하기 위한 라이브러리입니다. 이 라이브러리를 사용하여 동적 SQL 쿼리를 생성하는 방법에 대해 알아보겠습니다.

동적 SQL 쿼리란?

동적 SQL 쿼리란 실행 시점에 쿼리의 일부 또는 전체를 동적으로 생성하는 방식을 말합니다. 예를 들어 사용자의 입력이나 조건에 따라 WHERE 절의 조건을 변경하거나 테이블명을 동적으로 지정하는 등의 작업을 동적 SQL 쿼리를 사용하여 수행할 수 있습니다.

Psycopg2를 사용한 동적 SQL 쿼리 생성 방법

Psycopg2에서는 파이썬의 문자열 포맷팅을 사용하여 동적 SQL 쿼리를 생성할 수 있습니다. 하지만 이 방법은 SQL Injection 공격에 취약하므로 추천되지 않습니다. 대신 Psycopg2에서 제공하는 %s를 사용하여 쿼리 파라미터를 전달하는 방법을 사용하는 것이 안전합니다.

아래는 Psycopg2를 사용하여 동적 SQL 쿼리를 생성하는 예제 코드입니다.

import psycopg2

def dynamic_query_example(name):
    conn = psycopg2.connect(host='localhost', dbname='mydatabase', user='myuser', password='mypassword')
    cursor = conn.cursor()

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

    rows = cursor.fetchall()

    for row in rows:
        # Do something with the row data
        print(row)

    cursor.close()
    conn.close()

위의 예제에서는 입력으로 받은 name 값을 이용하여 users 테이블에서 해당 이름에 맞는 사용자 데이터를 검색하는 동적 SQL 쿼리를 생성하고 실행합니다. cursor.execute() 메소드의 두 번째 인자에 튜플 형태로 쿼리 파라미터를 전달하여 쿼리를 실행합니다.

위의 예제는 간단한 예시일 뿐이며, 실제 개발에서는 보안 및 성능을 고려하여 쿼리 생성 방법을 결정해야 합니다. 동적 SQL 쿼리를 생성할 때는 사용자 입력의 유효성 검사와 쿼리 파라미터화를 통해 SQL Injection 공격을 방지하는 것이 중요합니다.

Psycopg2를 사용하여 동적 SQL 쿼리를 생성하는 방법에 대해 알아보았습니다. 이를 활용하여 데이터베이스 작업을 보다 효율적으로 처리할 수 있습니다.