PythonでのMySQLでのプリペアドステートメントの使用については、たとえばhttp://zetcode.com/db/mysqlpython/<で説明されています。 / a> -そのページ内でPrepared statements
を探します 。
あなたの場合、それは例えば:
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
への1回の呼び出しが可能であると考えてください。 (2番目の引数としてタプルのシーケンスを使用)ループ全体の代わりになる可能性があります(DBへのデータの挿入だけでなく、そのループ内でより多くの処理が必要な場合を除く)。
追加:最近のより良い代替手段は、mysql独自のConnector/Python
を使用することです。 明示的なprepare=True
.cursor()
のオプション ファクトリ-import this
これらすべての原則を読むためのインタラクティブなプロンプトから)。 mysqldb
暗黙のうちに物事を行う(そして現在のオープンソースバージョンはそうではないようです プリペアドステートメントを使用する)は、Connector/Python
ほど優れたアーキテクチャにはなり得ません のより明確なもの。