>데이터 베이스 >MySQL 튜토리얼 >Python에서 MySQL과 함께 준비된 문을 사용하는 방법: 구문 오류 방지 및 성능 최적화를 위한 가이드

Python에서 MySQL과 함께 준비된 문을 사용하는 방법: 구문 오류 방지 및 성능 최적화를 위한 가이드

Patricia Arquette
Patricia Arquette원래의
2024-11-08 04:22:02412검색

How to Use Prepared Statements with MySQL in Python: A Guide for Avoiding Syntax Errors and Optimizing Performance

Python에서 MySQL과 함께 준비된 문 사용

직접 SQL 사용을 통해 Python에서 준비된 문으로 SQL을 활용하려고 하면 사용자에게 오류가 발생할 수 있습니다. "SQL 구문에 오류가 있습니다"와 같은 것입니다. 이는 다음과 같은 문을 실행할 때 발생할 수 있습니다:

sql = "PREPARE stmt FROM ' INSERT INTO {} (date, time, tag, power) VALUES (?, ?, ?, ?)'".format(self.db_scan_table)
self.cursor.execute(sql)

다음:

sql = "EXECUTE stmt USING \'{}\', \'{}\', {}, {};".format(d, t, tag, power)
self.cursor.execute(sql)

이 문제를 해결하려면 Python에는 준비된 문에 대한 내장 메커니즘이 없다는 점을 이해하는 것이 중요합니다. 대신 커서 개체의 Execute() 메서드를 활용하여 명령문을 동적으로 준비하고 실행할 수 있습니다.

예:

sql = ('INSERT INTO {} (date, time, tag, power) VALUES '
       '(%s, %s, %s, %s)'.format(self.db_scan_table))
self.cursor.execute(sql, (d, t, tag, power))

이 접근 방식을 사용하면 다음과 같이 추가 문자열 형식 지정의 필요성이 줄어듭니다. MySQLdb 모듈은 명령문의 준비와 실행을 자동으로 처리합니다.

또한 언급된 루프에 데이터 삽입만 포함된 경우 일련의 튜플을 두 번째로 사용하여 .execute_many()에 대한 단일 호출을 고려하는 것이 좋습니다. 인수는 전체 루프를 대체하여 효율성을 향상시킬 수 있습니다.

게다가 mysql의 Connector/Python은 .cursor()의 prepare=True 옵션을 통해 우수한 대안을 제공합니다. 이를 통해 명령문을 명시적으로 준비할 수 있는 동시에(효율적인 바이너리 프로토콜 활용) 준비되지 않은 상태로 두는 것이 더 나은 명령문에 대해 다른 커서를 사용할 수 있습니다.

위 내용은 Python에서 MySQL과 함께 준비된 문을 사용하는 방법: 구문 오류 방지 및 성능 최적화를 위한 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.