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

Hvordan opdaterer man mysql med python, hvor felter og indgange er fra en ordbog?

Du ønsker ikke at sætte bogstavelige værdier i brug af strenginterpolation - SQL-injektionsangreb er ikke en god ting(tm) . I stedet bruger du den pladsholdersyntaks, der er relevant for din database (jeg tror, ​​at MySQL er '%s').

Bemærk:Jeg bruger .format her, skift til at bruge %, hvis du vil, men escape eventuelle %'er

d = {'col1': 'val1', 'col2': 'val2'}
sql = 'UPDATE table SET {}'.format(', '.join('{}=%s'.format(k) for k in d))
print sql
# 'UPDATE table SET col2=%s, col1=%s'

Forudsat cur er en DB-markør, er den korrekte måde at udføre forespørgslen på:

cur.execute(sql, d.values())

Dette virker, fordi selvom rækkefølgen af ​​en ordbog faktisk er vilkårlig rækkefølge, vil rækkefølgen af ​​nøgler/værdier af en dict være konsistent, således at dict(zip(d.keys(), d.values())) == d .



  1. Tilfældigt udvalgte rækker via JPA

  2. Sådan erstattes NULL med en anden værdi i SQL Server – ISNULL()

  3. Lær, hvordan du tuner ydeevnen til Microsoft SQL Server

  4. Er det muligt at slette alt efter et 'mellemrum' i MySQL-feltet?