В качестве расширения ответа Бруно ваша клиентская библиотека MySQL может поддерживать любой из нескольких различных форматов для указания именованных параметров. Начиная с PEP 249 (DB-API) , вы можете написать свои запросы как:
'qmark'
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = ?", (lumberjack,))
'числовой'
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = :1", (lumberjack,))
'под названием'
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = :jack", {'jack': lumberjack})
* 1013 'формат' * * * 1014
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = %s", (lumberjack,))
pyformat '
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = %(jack)s", {'jack': lumberjack})
Вы можете узнать, какую поддержку поддерживает ваша клиентская библиотека, посмотрев переменную уровня модуля paramstyle
:
>>> clientlibrary.paramstyle
'pyformat'
Любой из вышеперечисленных вариантов должен делать правильные шаги в отношении обработки ваших, возможно, небезопасных данных. Как отметил Бруно, никогда не пытайтесь вводить параметры самостоятельно. Обычно используемые клиентские библиотеки гораздо лучше обрабатывают данные, чем мы, простые смертные.