Du vill inte sätta bokstavliga värden i att använda stränginterpolation - SQL-injektionsattacker är inte bra(tm) . Istället använder du platshållarsyntaxen som är relevant för din databas (jag tror att MySQL är '%s').
Obs! Jag använder .format
Ändra här till att använda % om du vill, men undvik eventuella %
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'
Om du antar cur
är en DB-markör är det korrekta sättet att utföra frågan:
cur.execute(sql, d.values())
Detta fungerar eftersom även om ordningen av en ordbok faktiskt är godtycklig ordning, kommer ordningen på nycklar/värden för ett dict att vara konsekvent så att dict(zip(d.keys(), d.values())) == d
.