Mysql
 sql >> Database >  >> RDS >> Mysql

Comprese le chiamate alle funzioni DB in Python MySQLdb executemany()

Il metodo seguente è tutt'altro che ideale, ma, sfortunatamente, è l'unico modo che conosco.

L'idea è di costruire manualmente l'SQL, usando connection.literal per sfuggire agli argomenti per te:

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)

Sembra orribile e potrebbe farti accapponare la pelle, ma se guardi sotto il cofano (in /usr/lib/pymodules/python2.6/MySQLdb/cursors.py) cosa sta facendo MySQLdb in cursors.executemany , penso che questo sia sulla stessa linea di quello che sta facendo quella funzione, meno il mix dovuto alla regex cursors.insert_values non analizzando correttamente le parentesi nidificate. (eek!)

Ho appena installato oursql , un'alternativa a MySQLdb, e sono lieto di segnalarlo

sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)

funziona come previsto con oursql.