Остерегайтесь использования строковой интерполяции для 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, различаются между различными реализациями API БД и что клиентская библиотека mysql использует синтаксис стиля printf
вместо более общепринятого '?' (используется, например, python-sqlite
).