Tenga cuidado con el uso de la interpolación de cadenas para consultas SQL, ya que no escapará correctamente de los parámetros de entrada y dejará su aplicación abierta a vulnerabilidades de inyección SQL. La diferencia puede parecer trivial, pero en realidad es enorme .
Incorrecto (con problemas de seguridad)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Correcto (con escape)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Se suma a la confusión que los modificadores utilizados para vincular parámetros en una instrucción SQL varían entre diferentes implementaciones de API de base de datos y que la biblioteca del cliente mysql usa printf
sintaxis de estilo en lugar de la más comúnmente aceptada '?' marcador (utilizado por ejemplo, python-sqlite
).