Не искате да поставяте буквални стойности при използването на интерполация на низове - атаките с инжектиране на SQL не са добро нещо (tm) . Вместо това, вие използвате синтаксиса за място, подходящ за вашата база данни (мисля, че MySQL е „%s“).
Забележка:Използвам .format
тук променете да използвате %, ако искате, но избягвайте всички %
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'
Ако приемем cur
е DB курсор, правилният начин за изпълнение на заявката е:
cur.execute(sql, d.values())
Това работи, защото въпреки че подреждането на речника е на практика произволен ред, редът на ключовете/стойностите на dict ще бъде последователен, така че dict(zip(d.keys(), d.values())) == d
.