Есть ли способ или пакет, с помощью которого мы можем выполнять фильтры (поиск) по пользовательским необработанным sql-запросам в django?
Я прочитал приведенный ниже документ : https://docs.djangoproject.com/en/3.2/topics/db/sql/
В модели доступно множество фильтров поиска, таких как field__gt, field__lt, field__range, field__contains
но я хочу использовать их в необработанном sql, например предположим
query = SELECT * от клиентов WHERE customers.name like '%name%' and age < 30 and status IN ('active','pending')
>>Здесь:
- customers.name like '%name%'
имя будет вводиться пользователем, поэтому я хочу защитить его от sql-инъекций, а также отфильтровать с помощью оператора % .
- age < 30 30 будет пользовательским вводом, и я хочу выполнить < > = также
- IN ('active','pending') хотим передать список строк с помощью оператора IN
существует ли какой-нибудь подходящий способ/пакет, с помощью которого мы можем запускать необработанный sql, предотвращая sql-инъекции, а также фильтровать данные, используя %, IN, <, >, = операторы.
Как насчет использования Django ORM? (Это было бы правильным способом)
Customer.objects.filter(name__contains=“name”, age__lt=30, status__in=[‘active’, ‘pending’])
При условии, что имена таблиц/столбцов и моделей/полей совпадают, это приведет к точному запросу, который вы ищете, со всей безопасностью, которую вы хотите. Если вам действительно нужно выполнить необработанный запрос, то @Rvector предоставил вам необходимую документацию.