Python での MySQL でのプリペアド ステートメントの使用: 詳細な説明
構文の理解
MySQL のプリペアド ステートメントは、クエリをより効率的かつ安全に実行する方法を提供します。クエリの準備フェーズを実行フェーズから分離します。プリペアド ステートメントを使用する場合は、潜在的なエラーを回避するために正しい構文に従うことが重要です。
エラーの説明
コード スニペットでは、以下を使用しているため、エラーが発生します。プリペアドステートメントの構文が正しくありません。問題の内訳は次のとおりです。
sql = "PREPARE stmt FROM ' INSERT INTO {} (date, time, tag, power) VALUES (?, ?, ?, ?)'".format(self.db_scan_table) self.cursor.execute(sql)
この行は、SQL 文字列を使用して「stmt」という名前のステートメントを準備しようとします。ただし、Python の MySQLdb モジュールは、「PREPARE」および「EXECUTE」コマンドを直接サポートしていません。
MySQLdb を使用した解決策
MySQLdb で準備されたステートメントを使用するには、以下が必要です。少し異なるアプローチを使用するには:
sql = ('INSERT INTO {} (date, time, tag, power) VALUES (%s, %s, %s, %s)'.format(self.db_scan_table))
この行は、次の SQL 文字列を作成します。挿入される値のプレースホルダー (「?」文字)。
self.cursor.execute(sql, (d, t, tag, power))
この行は、タプル内の指定された値を使用して準備されたステートメントを実行します。 MySQLdb は自動的にステートメントを準備し、実行を処理します。
MySQL Connector/Python の使用
Python の MySQL で準備されたステートメントを使用するより現代的で効率的な方法は、次のとおりです。 MySQL コネクタ/Python。カーソル ファクトリで明示的な "prepare=True" オプションを提供します。
cursor = conn.cursor(prepared=True) sql = ('INSERT INTO {} (date, time, tag, power) VALUES (%s, %s, %s, %s)'.format(self.db_scan_table)) cursor.execute(sql, (d, t, tag, power))
このアプローチにより、準備されたステートメントをより詳細に制御でき、パフォーマンスとセキュリティの向上のために推奨されます。
以上がPython の MySQL でプリペアドステートメントを使用する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。