Fai attenzione all'uso dell'interpolazione delle stringhe per le query SQL, poiché non sfuggirà correttamente ai parametri di input e lascerà l'applicazione aperta alle vulnerabilità di SQL injection. La differenza potrebbe sembrare banale, ma in realtà è enorme .
Errore (con problemi di sicurezza)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Corretto (con escape)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Si aggiunge alla confusione che i modificatori utilizzati per associare i parametri in un'istruzione SQL variano tra le diverse implementazioni dell'API DB e che la libreria client mysql utilizza printf
sintassi dello stile invece del più comunemente accettato '?' marker (usato ad es. da python-sqlite
).