Sie wollen keine Literalwerte in die Zeichenfolgeninterpolation einfügen - SQL-Injection-Angriffe sind keine gute Sache(tm) . Stattdessen verwenden Sie die für Ihre Datenbank relevante Platzhaltersyntax (ich glaube, die von MySQL ist '%s').
Hinweis:Ich verwende .format
ändern Sie hier, um % zu verwenden, wenn Sie möchten, aber maskieren Sie 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'
Angenommen cur
ein DB-Cursor ist, ist die korrekte Art und Weise, die Abfrage auszuführen, wie folgt:
cur.execute(sql, d.values())
Dies funktioniert, weil die Reihenfolge der Schlüssel/Werte eines Diktats konsistent ist, obwohl die Reihenfolge eines Wörterbuchs praktisch willkürlich ist, sodass dict(zip(d.keys(), d.values())) == d
.