Hüten Sie sich vor der Verwendung von String-Interpolation für SQL-Abfragen, da dies die Eingabeparameter nicht korrekt maskiert und Ihre Anwendung für SQL-Injection-Schwachstellen offen lässt. Der Unterschied mag trivial erscheinen, aber in Wirklichkeit ist er riesig .
Falsch (mit Sicherheitsproblemen)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Richtig (mit Escapezeichen)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Es trägt zu der Verwirrung bei, dass die Modifikatoren, die zum Binden von Parametern in einer SQL-Anweisung verwendet werden, zwischen verschiedenen DB-API-Implementierungen variieren und dass die mysql-Clientbibliothek printf
verwendet Style-Syntax anstelle des allgemein akzeptierten '?' Markierung (wird z. B. von python-sqlite
verwendet ).