Metoden nedenfor er langt fra ideel, men det er desværre den eneste måde, jeg kender.
Ideen er at konstruere SQL manuelt ved hjælp af connection.literal
for at undslippe argumenterne for dig:
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)
Dette ser forfærdeligt ud og kan få din hud til at kravle, men hvis du ser under motorhjelmen (i /usr/lib/pymodules/python2.6/MySQLdb/cursors.py) på, hvad MySQLdb laver i cursors.executemany , jeg tror, det er på samme måde som det, den funktion gør, minus sammenblandingen på grund af regexet
cursors.insert_values
parser ikke de indlejrede parenteser korrekt. (eek!)
Jeg har lige installeret oursql , et alternativ til MySQLdb, og er glad for at kunne rapportere det
sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)
fungerer som forventet med oursql.