sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo actualizar mysql con python donde los campos y las entradas son de un diccionario?

No desea poner valores literales al usar la interpolación de cadenas:los ataques de inyección SQL no son una buena cosa (tm) . En su lugar, utiliza la sintaxis de marcador de posición relevante para su base de datos (creo que MySQL es '%s').

Nota:estoy usando .format aquí, cambia para usar % si quieres, pero escapa cualquier %

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'

Asumiendo cur es un cursor DB, la forma correcta de realizar la consulta es:

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

Esto funciona porque aunque el orden de un diccionario es un orden arbitrario, el orden de las claves/valores de un dict será consistente de tal manera que dict(zip(d.keys(), d.values())) == d .