Die folgende Methode ist alles andere als ideal, aber leider ist dies die einzige Möglichkeit, die ich kenne.
Die Idee ist, das SQL manuell zu erstellen, indem connection.literal
verwendet wird um den Argumenten für Sie zu entkommen:
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)
Das sieht schrecklich aus und kann Ihre Haut zum Kriechen bringen, aber wenn Sie unter die Haube (in /usr/lib/pymodules/python2.6/MySQLdb/cursors.py) schauen, was MySQLdb in cursors.executemany
cursors.insert_values
die verschachtelten Klammern werden nicht korrekt analysiert. (eek!)
Ich habe gerade unser SQL installiert , eine Alternative zu MySQLdb, und freue mich, Ihnen das mitteilen zu können
sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)
funktioniert wie erwartet mit oursql.