В качестве расширения ответа Бруно ваша клиентская библиотека 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})
'формат'
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = %s", (lumberjack,))
"пиформат"
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = %(jack)s", {'jack': lumberjack})
Вы можете увидеть, что поддерживает ваша клиентская библиотека, посмотрев на переменную уровня модуля paramstyle
:
>>> clientlibrary.paramstyle
'pyformat'
Любой из вышеперечисленных вариантов должен действовать правильно в отношении обработки ваших, возможно, небезопасных данных. Как заметил Бруно, никогда не пытайтесь самостоятельно вставлять параметры. Часто используемые клиентские библиотеки обрабатывают данные намного лучше, чем мы, простые смертные.
person
Kirk Strauser
schedule
28.10.2011