Cara di bawah ini jauh dari ideal, tapi sayangnya hanya itu yang saya tahu.
Idenya adalah untuk membuat SQL secara manual, menggunakan connection.literal
untuk menghindari argumen untuk Anda:
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)
Ini terlihat mengerikan, dan mungkin membuat kulit Anda merinding, tetapi jika Anda melihat di bawah tenda (di /usr/lib/pymodules/python2.6/MySQLdb/cursors.py) apa yang dilakukan MySQLdb di cursors.executemany
, Saya pikir ini sejalan dengan apa yang dilakukan fungsi itu, dikurangi campur aduk karena regex cursors.insert_values
tidak menguraikan tanda kurung bersarang dengan benar. (eek!)
Saya baru saja menginstal oursql , sebuah alternatif untuk MySQLdb, dan dengan senang hati saya laporkan bahwa
sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)
bekerja seperti yang diharapkan dengan oursql.