以下の方法は理想からはほど遠いですが、残念ながら、それが私が知っている唯一の方法です。
アイデアは、 connection.literal
を使用して、SQLを手動で構築することです。 あなたのために議論を逃れるために:
cursor=connection.cursor()
args=[(1,'foo'),(2,'bar')]
sql=('INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES '
+','.join(
['(%s,%s,NOW())'%connection.literal(arg)
for arg in args]))
cursor.execute(sql)
これはひどいように見え、肌を這わせる可能性がありますが、内部(/usr/lib/pymodules/python2.6/MySQLdb/cursors.py内)を見ると、MySQLdbがcursors.executemany<で何をしているのかを確認できます。 / code> 、これは、正規表現
cursors.insert_values
による混乱を除いて、その関数が実行していることと同じ線に沿っていると思います。 ネストされた括弧を正しく解析していません。 (eek!)
oursqlをインストールしました 、MySQLdbの代替であり、喜んで報告します
sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)
oursqlで期待どおりに機能します。