Как вставить переменную в sql запрос на python
Перейти к содержимому

Как вставить переменную в sql запрос на python

Как использовать переменные в SQL-выражении в Python?

где var1 является целым числом, var2 & var3 являются строками.

Как я могу написать имена переменных без Python, включая их как часть текста запроса?

4 ответа

Обратите внимание, что параметры передаются как кортеж.

API базы данных правильно экранирует и цитирует переменные. Будьте осторожны, чтобы не использовать оператор форматирования строки ( % ), потому что

  1. он не делает экранирования или цитирования.
  2. он подвержен атакам неконтролируемого строкового формата, например 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 базы данных выполняет правильное экранирование и цитирование переменных. Будьте осторожны и не используйте оператор форматирования строки ( % ), потому что

  1. он не выполняет экранирования или цитирования.
  2. он подвержен атакам неконтролируемого строкового формата, например, 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,)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *