Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 튜플로 SQL IN 쿼리를 안전하게 작성하는 방법

SQL IN 쿼리에서 플레이스홀더 활용하기

파이썬에서 튜플(tuple) 값을 사용해 SQL의 IN 절 쿼리를 작성할 때는, 쿼리 문자열에 직접 값을 삽입하는 대신 플레이스홀더(placeholder)를 먼저 만들어 두어야 합니다. 이렇게 하면 값들이 자동으로 이스케이프(escape) 처리되어 SQL 인젝션 공격을 예방하고 쿼리 오류도 방지할 수 있습니다.

예제 코드

튜플의 길이에 맞게 물음표(?) 플레이스홀더를 동적으로 생성하는 방법은 다음과 같습니다.

my_tuple = ("Hello", "world", "John")
placeholder = '?'
placeholders = ', '.join(placeholder for _ in my_tuple)
query = 'SELECT name FROM students WHERE id IN (%s)' % placeholders
print(query)

생성된 쿼리를 커서(cursor) 객체를 통해 실행합니다.

# 이제 커서를 사용하여 쿼리를 실행합니다
cursor.execute(query, my_tuple)

실행 결과

위 코드를 실행하면 다음과 같은 쿼리 문자열이 출력됩니다.

'SELECT name FROM students WHERE id IN (?, ?, ?)'

execute() 메서드가 호출되면, 쿼리 내의 ? 플레이스홀더들이 튜플에 담긴 값들로 순서대로 대체되며, 각 값은 자동으로 이스케이프 처리되어 안전하게 데이터베이스에 전달됩니다.

핵심 정리

  • 튜플 길이만큼 ? 플레이스홀더를 생성하여 IN (...) 구문을 완성합니다.
  • 값은 쿼리 문자열에 직접 넣지 않고 execute()의 두 번째 인자로 전달합니다.
  • 이 방식은 DB-API 규격을 따르므로 SQL 인젝션 위험을 크게 줄여 줍니다.