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 중국어 웹사이트의 기타 관련 기사를 참조하세요!