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
.