Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie aktualisiere ich MySQL mit Python, wo Felder und Einträge aus einem Wörterbuch stammen?

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 .