sql >> Database >  >> RDS >> Mysql

Inclusief DB-functieaanroepen in python MySQLdb executemany()

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.




  1. RowGen v3 automatiseert het genereren van databasetestgegevens

  2. Hoe kan ik een specifiek record bijwerken zonder SELECT-machtiging?

  3. de MySQL-service op de lokale computer is gestart en vervolgens gestopt

  4. Codeigniter kan geen rijen uit de databasetabel verwijderen met de join-methode