Внимавайте да използвате интерполация на низове за SQL заявки, тъй като тя няма да избяга правилно от входните параметри и ще остави приложението ви отворено за уязвимости при SQL инжектиране. Разликата може да изглежда тривиална, но в действителност е огромна .
Неправилно (с проблеми със сигурността)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Правилно (с екраниране)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Това добавя към объркването, че модификаторите, използвани за свързване на параметри в SQL израз, варират между различните реализации на DB API и че клиентската библиотека mysql използва printf
стилов синтаксис вместо по-често приемания '?' маркер (използван например от python-sqlite
).