Как сделать безопасно строку с sql запросом и различными параметрами?
Добрый день. Подскажите безопасно ли выполнять запросы сформированные таким образом, смущает f строка. И как реализовать кавычки для условий с строковыми столбцами.
def objects(**kwargs): query = ''' SELECT id as oid, name, ct_date, info FROM "test".public."Сourier" %(where)s; ''' return query % {'where': f"WHERE {' AND '.join([f'{key} = {value}' for key, value in kwargs.items()])}" if kwargs else ''} print(objects(display_name=1, info='test')) ---Вывод SELECT id as oid, name, ct_date, info FROM "test".public."Сourier" WHERE display_name = 1 AND info = test; |
def objects(**kwargs): query = ''' SELECT id as oid, name, ct_date, info FROM "test".public."Сourier" %(where)s; ''' return query % {'where': f"WHERE {' AND '.join([f'{key} = {value}' for key, value in kwargs.items()])}" if kwargs else ''} print(objects(display_name=1, info='test')) ---Вывод SELECT id as oid, name, ct_date, info FROM "test".public."Сourier" WHERE display_name = 1 AND info = test;
Дополнительно:
Имена таблиц и столбцов можно подставлять f-строкой, если у тебя нет другого выбора и ты гарантируешь, что туда не попадёт пользовательский ввод.
Для значений нужно использовать подстановку параметров.
Ответы:
https://www.google.com/search?q=python+mysql+prepa...
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для безопасного выполнения SQL запросов с использованием параметров следует использовать подготовленные запросы. Подготовленные запросы позволяют отделить код SQL запроса от данных, что обеспечивает безопасность от SQL инъекций.
Вот пример использования подготовленного запроса с параметрами в PHP:
// Подключение к базе данных $pdo = new PDO("mysql:host=хост;dbname=имя_базы_данных", "пользователь", "пароль"); // SQL запрос с параметрами $sql = "SELECT * FROM users WHERE username = :username AND email = :email"; // Подготовка запроса $stmt = $pdo->prepare($sql); // Привязка параметров $stmt->bindParam(':username', $username); $stmt->bindParam(':email', $email); // Выполнение запроса $stmt->execute(); // Получение результата $result = $stmt->fetchAll();
В данном примере переменные $username и $email представляют значения, которые будут использоваться в SQL запросе. При использовании подготовленных запросов с параметрами, данные будут автоматически экранироваться, что обеспечивает безопасность от SQL инъекций.
Таким образом, использование подготовленных запросов с параметрами позволяет безопасно работать с SQL запросами, защищая ваше приложение от потенциальных угроз безопасности.