ホームページ  >  記事  >  データベース  >  MySQL で Python のプリペアド ステートメントを使用すると「SQL 構文エラー」が発生するのはなぜですか?

MySQL で Python のプリペアド ステートメントを使用すると「SQL 構文エラー」が発生するのはなぜですか?

DDD
DDDオリジナル
2024-11-07 16:51:03798ブラウズ

Why Am I Getting a

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。