Методът по-долу е далеч от идеалния, но, за съжаление, това е единственият начин, който познавам.
Идеята е ръчно да се конструира SQL, като се използва connection.literal
за да избягам от аргументите вместо вас:
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код> , мисля, че това е по същия начин като това, което тази функция прави, минус объркването поради регулярния израз
cursors.insert_values
не анализира правилно вложените скоби. (eek!)
Току-що инсталирах oursql , алтернатива на MySQLdb, и с удоволствие съобщавам за това
sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)
работи според очакванията с oursql.