Как использовать переменные в SQL-выражении в Python?
где var1 является целым числом, var2 & var3 являются строками.
Как я могу написать имена переменных без Python, включая их как часть текста запроса?
4 ответа
Обратите внимание, что параметры передаются как кортеж.
API базы данных правильно экранирует и цитирует переменные. Будьте осторожны, чтобы не использовать оператор форматирования строки ( % ), потому что
- он не делает экранирования или цитирования.
- он подвержен атакам неконтролируемого строкового формата, например SQL-инъекция .
Разным реализациям Python DB-API разрешено использовать разные заполнители, поэтому вам нужно выяснить, какой из них вы используете — это может быть (например, с MySQLdb):
или (например, с sqlite3 из стандартной библиотеки Python):
или еще какие-либо (после VALUES у вас может быть (:1, :2, :3) или «именованные стили» (:fee, :fie, :fo) или (%(fee)s, %(fie)s, %(fo)s) где вы передаете dict вместо карты в качестве второго аргумента для execute ). Проверьте строковую константу paramstyle в используемом модуле API-интерфейса БД и найдите параметр типа в http://www.python.org/dev/peps/pep-0249/, чтобы увидеть, что все параметры- Стили прохождения есть!
Много способов. НЕ используйте наиболее очевидный вариант ( %s с % ) в реальном коде он открыт для атак .
Как использовать переменные в операторе SQL в Python?
Как я могу написать имена переменных без включения их Python в текст запроса?
Обратите внимание, что параметры передаются в виде кортежа.
API базы данных выполняет правильное экранирование и цитирование переменных. Будьте осторожны и не используйте оператор форматирования строки ( % ), потому что
- он не выполняет экранирования или цитирования.
- он подвержен атакам неконтролируемого строкового формата, например, SQL-инъекциям .
Различные реализации Python DB-API могут использовать разные заполнители, поэтому вам нужно выяснить, какой из них вы используете — это может быть (например, с MySQLdb):
или (например, с sqlite3 из стандартной библиотеки Python):
или другие (после VALUES того, как вы могли иметь (:1, :2, :3) , или «именованные стили», (:fee, :fie, :fo) или (%(fee)s, %(fie)s, %(fo)s) где вы передаете dict вместо карты в качестве второго аргумента execute ). Проверьте paramstyle строковую константу в используемом вами модуле API БД и найдите paramstyle на http://www.python.org/dev/peps/pep-0249/, чтобы узнать, что такое все стили передачи параметров!
Много способов. НЕ используйте наиболее очевидный ( %s с % ) в реальном коде, он открыт для атак .
Вставка переменных в SQL — запрос. Python3
Подскажите плиз, не могу вставить в SQL-запрос значение в двойных кавычках.
Сам запрос выглядит так:
Попытка вставить в проекте Python
В итоге получаю ошибку вида
Уже и в двойный, и в одинарные кавычки пытался заключать переменные vs и vs2, не помогает(
Для коннекта к БД Использую PyMySQL.

Ошибка в самом sql запросе. LIMIT убери.
Действительно, блин:)) Спасибо большое!

Хватит уже SQL-инъекций, используй prepared statements.
Вроде и так же использую, %s. Или это не то?
execute проводит эскейпинг.

Сейчас посмотрел — оказывается, %s используется как заполнитель. Сначала подумал, что строка запроса генерируется явно, через "%s" % (something,)