raw()
Если ваш API-интерфейс запроса модели не может выполнить определенные запросы или вы хотите повысить производительность, вы можете использовать необработанные SQL-запросы в Django. ORM(Object Relational Mapper) помогает преодолеть разрыв между базой данных и нашим кодом, выполняя необработанные запросы через метод raw().
Employee.objects.raw('select * FROM hr_employee')
Возвращает объект <RawQuerySet: select * FROM hr_employee>
AND (&)
Объединяет два запроса QuerySet с помощью оператора SQL AND аналогично цепочке фильтров.
Employee.objects.filter(id=1) & Employee.objects.filter(age__gt=0)
Employee.objects.filter(id=1).filter(age__gt=0)
Это два запроса, которые будут эквивалентны друг другу.
OR (|)
Объединяет два QuerySet с помощью оператора SQL OR.
Employee.objects.filter(id=1) | Employee.objects.filter(id=2)
Выполнение SQL:
XOR (^)
Объединяет два QuerySet с помощью оператора SQL XOR.
Employee.objects.filter(id=1) ^ Employee.objects.filter(age__gt=2)
XOR изначально поддерживается в MariaDB и MySQL. В других базах данных преобразуется в эквивалент: x ^ y ^ ... ^ z
(x OR y OR ... OR z) AND
1=(
(CASE WHEN x THEN 1 ELSE 0 END) +
(CASE WHEN y THEN 1 ELSE 0 END) +
...
(CASE WHEN z THEN 1 ELSE 0 END) +
)