sql >> Databáze >  >> RDS >> Mysql

Včetně volání funkcí DB v pythonu MySQLdb executemany()

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.




  1. Funkce WIDTH_BUCKET() v Oracle

  2. mysql, sloupec utf-8:jak vybrat pouze malá a velká písmena?

  3. Pomocí select do lokální proměnné a připraveného příkazu v mysql

  4. mysql pořadí podle, nejprve null a poté DESC