Python での MySQL でのプリペアド ステートメントの使用: 構文の明確化とエラーの回避
MySQL でプリペアド ステートメントを使用するとエラーが発生します。 Python、「SQL 構文にエラーがあります」というメッセージが表示される。指定したコードを調べて問題を特定しましょう。
ステートメントの準備に使用したコードは正しいように見えますが、その後のステートメントの実行にはエラーが含まれます。具体的には、ループ内のコードは、準備されたステートメントが予期するものとは異なる構文のパラメーターを使用しているようです。
sql = "EXECUTE stmt USING \'{}\', \'{}\', {}, {};".format(d, t, tag, power)
回答で提供される例では、Python の MySQLdb モジュールを使用したより効率的なアプローチが提案されています。
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))
ここでは、値 (%s) のプレースホルダーが SQL クエリ文字列で直接指定されており、実際の値は実行呼び出しでタプルとして渡されます。これにより、コード内で構文エラーを引き起こす可能性があった、実行段階での文字列フォーマットの必要がなくなります。
あるいは、cursor() で prepare=True オプションを指定して MySQL 独自の Connector/Python を使用することもできます。これは、PREPARE ステートメントや EXECUTE ステートメントを使用するよりも効率的かつ明示的です。
以上がMySQL で Python のプリペアド ステートメントを使用すると「SQL 構文エラー」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。