idegree
@idegree
Senior Workaround Developer

Как экранировать символы перед вставкой в sql-запрос?

Здравствуйте! Имеется довольно большой raw sql-запрос в приложении flask. Имеется ORM SQLAlchemy, но, как я и сказал, запрос слишком большой, чтобы писать его средствами орм, да и к тому же текст запроса собирается "на лету" в зависимости от разных условый. Для избежания SQL-инъекций требуется экранировать символы, содержащиеся в переменных, перед вставкой в запрос. Как это можно сделать? Возможно есть ещё какие-то варианты как собрать и выполнить запрос? Переменные вставляются в запрос обычной конкатенацией строк.
  • Вопрос задан
  • 5101 просмотр
Решения вопроса 2
johniek_comp
@johniek_comp
developer
Собирайте строку и вместо переменных пишите %, попутно собирая список переменных, потом через execute выполняйте, orm сделает все сама. В драйвере Mysql для python есть функция escape_string(), если у вас так прямо все тяжело.
Ответ написан
Ermako
@Ermako
Data Scientist
Warning

Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint.

А почему Вы не используете связываемые переменные и prepared statements? Такие конструкции сами по себе содержат защиту от SQL-инъекций.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы