Dejte si pozor na používání řetězcové interpolace pro dotazy SQL, protože nebude správně unikat vstupním parametrům a vaše aplikace zůstane otevřená zranitelnostem vkládání SQL. Rozdíl se může zdát triviální, ale ve skutečnosti je obrovský .
Nesprávné (s bezpečnostními problémy)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Správně (s escapováním)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Ke zmatku přispívá to, že modifikátory používané k navázání parametrů v příkazu SQL se mezi různými implementacemi DB API liší a že klientská knihovna mysql používá printf
syntaxe stylu namísto běžněji akceptovaného '?' značka (používá se např. python-sqlite
).