U wilt geen letterlijke waarden invoeren in string-interpolatie - SQL-injectie-aanvallen zijn geen goede zaak(tm) . In plaats daarvan gebruik je de placeholder-syntaxis die relevant is voor je database (ik denk dat die van MySQL '%s' is).
Opmerking:ik gebruik .format
verander hier om % te gebruiken als je wilt, maar ontsnap aan alle %'s
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'
Ervan uitgaande dat cur
is een DB-cursor de juiste manier om de query uit te voeren is:
cur.execute(sql, d.values())
Dit werkt omdat, hoewel de volgorde van een woordenboek in feite willekeurige volgorde is, de volgorde van sleutels/waarden van een dictaat consistent zal zijn, zodat dict(zip(d.keys(), d.values())) == d
.