De onderstaande methode is verre van ideaal, maar helaas is het de enige manier die ik ken.
Het idee is om de SQL handmatig te construeren, met behulp van connection.literal
om aan de argumenten voor jou te ontsnappen:
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)
Dit ziet er afschuwelijk uit en kan je huid doen kruipen, maar als je onder de motorkap kijkt (in /usr/lib/pymodules/python2.6/MySQLdb/cursors.py) naar wat MySQLdb doet in cursors.executemany
, Ik denk dat dit in dezelfde lijn ligt als wat die functie doet, minus de verwisseling vanwege de regex cursors.insert_values
de geneste haakjes niet correct ontleden. (eek!)
Ik heb zojuist oursql geïnstalleerd , een alternatief voor MySQLdb, en ik ben blij te kunnen melden dat
sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)
werkt zoals verwacht met oursql.