Metoden nedan är långt ifrån idealisk, men tyvärr är det det enda sättet jag vet.
Tanken är att manuellt konstruera SQL, med connection.literal
för att undkomma argumenten åt 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)
Det här ser hemskt ut och kan få din hud att krypa, men om du tittar under huven (i /usr/lib/pymodules/python2.6/MySQLdb/cursors.py) på vad MySQLdb gör i cursors.executemany , jag tror att detta är på samma sätt som vad den funktionen gör, minus mixupen på grund av regexet
cursors.insert_values
analyserar inte de kapslade parenteserna korrekt. (eek!)
Jag har precis installerat oursql , ett alternativ till MySQLdb, och jag rapporterar gärna det
sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)
fungerar som förväntat med oursql.