Níže uvedená metoda není zdaleka ideální, ale bohužel je to jediný způsob, který znám.
Cílem je ručně sestavit SQL pomocí connection.literal
abych unikl argumentům za vás:
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)
Vypadá to příšerně a může vám z toho lézt po kůži, ale když se podíváte pod pokličku (v /usr/lib/pymodules/python2.6/MySQLdb/cursors.py), co dělá MySQLdb v cursors.executemany
, Myslím, že je to ve stejném duchu jako to, co dělá tato funkce, mínus záměna způsobená regulárním výrazem cursors.insert_values
nesprávně analyzuje vnořené závorky. (eek!)
Právě jsem nainstaloval oursql , alternativa k MySQLdb, a s radostí vám to oznamuji
sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)
funguje podle očekávání s oursql.