Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment mettre à jour mysql avec python où les champs et les entrées proviennent d'un dictionnaire ?

Vous ne voulez pas mettre de valeurs littérales en utilisant l'interpolation de chaîne - les attaques par injection SQL ne sont pas une bonne chose(tm) . Au lieu de cela, vous utilisez la syntaxe d'espace réservé pertinente pour votre base de données (je pense que MySQL est '%s').

Remarque :J'utilise .format ici, changez pour utiliser % si vous le souhaitez, mais échappez tous les %

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'

En supposant cur est un curseur de base de données, la manière correcte d'effectuer la requête est :

cur.execute(sql, d.values())

Cela fonctionne car bien que l'ordre d'un dictionnaire soit effectivement un ordre arbitraire, l'ordre des clés/valeurs d'un dict sera cohérent de sorte que dict(zip(d.keys(), d.values())) == d .