Se upp för att använda stränginterpolation för SQL-frågor, eftersom det inte kommer att undvika indataparametrarna korrekt och lämnar din applikation öppen för SQL-injektionssårbarheter. Skillnaden kan verka trivial, men i verkligheten är den enorm .
Felaktigt (med säkerhetsproblem)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Rätt (med escape)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Det ökar förvirringen att modifierarna som används för att binda parametrar i en SQL-sats varierar mellan olika DB API-implementeringar och att mysql-klientbiblioteket använder printf
stilsyntax istället för det mer allmänt accepterade "?" markör (används av t.ex. python-sqlite
).