Pas på med at bruge strenginterpolation til SQL-forespørgsler, da det ikke undslipper inputparametrene korrekt og vil efterlade din applikation åben for SQL-injektionssårbarheder. Forskellen kan virke triviel, men i virkeligheden er den enorm .
Forkert (med sikkerhedsproblemer)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Korrekt (med escape)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Det øger forvirringen, at de modifikatorer, der bruges til at binde parametre i en SQL-sætning, varierer mellem forskellige DB API-implementeringer, og at mysql-klientbiblioteket bruger printf
stilsyntaks i stedet for det mere almindeligt accepterede '?' markør (bruges af f.eks. python-sqlite
).