Méfiez-vous de l'utilisation de l'interpolation de chaîne pour les requêtes SQL, car elle n'échappera pas correctement aux paramètres d'entrée et laissera votre application ouverte aux vulnérabilités d'injection SQL. La différence peut sembler insignifiante, mais en réalité elle est énorme .
Incorrect (avec des problèmes de sécurité)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Correct (avec échappement)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Cela ajoute à la confusion que les modificateurs utilisés pour lier les paramètres dans une instruction SQL varient entre les différentes implémentations de l'API DB et que la bibliothèque client mysql utilise printf
syntaxe de style au lieu du '?' marqueur (utilisé par ex. python-sqlite
).