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

Inkluderer DB-funktionskald i python MySQLdb executemany()

Metoden nedenfor er langt fra ideel, men det er desværre den eneste måde, jeg kender.

Ideen er at konstruere SQL manuelt ved hjælp af connection.literal for at undslippe argumenterne for 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)

Dette ser forfærdeligt ud og kan få din hud til at kravle, men hvis du ser under motorhjelmen (i /usr/lib/pymodules/python2.6/MySQLdb/cursors.py) på, hvad MySQLdb laver i cursors.executemany , jeg tror, ​​det er på samme måde som det, den funktion gør, minus sammenblandingen på grund af regexet cursors.insert_values parser ikke de indlejrede parenteser korrekt. (eek!)

Jeg har lige installeret oursql , et alternativ til MySQLdb, og er glad for at kunne rapportere det

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

fungerer som forventet med oursql.




  1. Hvordan får man alle indlæg med alle kategorier i wordpress gennem mysql?

  2. Eksporter Postgresql-tabeldata ved hjælp af pgAdmin

  3. Jdbc-driver ikke fundet

  4. MySQL fjerner duplikerede rækker