QuerySet в Django
Как я могу выполнить этот SQL запрос SELECT * FROM table_name WHERE culumm_name != value в QuerySet в Django
Я пробовал это, но это не правильный способ... Введите описание изображения здесь
Для выполнения sql-запросов просто используйте метод raw в Model следующим образом:
posts = Post.objects.raw("SELECT * FROM table_name WHERE column_name != %s;", [value])
for post in posts:
# do stuff with post object
Но я не думаю, что вам нужен необработанный запрос (если только вы не хотите избавиться от накладных расходов ORM для более быстрого получения записей), вы можете просто использовать ORM следующим образом:
posts = Post.objects.all().exclude(column_name=value)
Вы можете сделать это, используя Q
:
from django.db.models import Q
posts = Post.objects.filter(~Q(column_name=value))
Я думаю, что вы хотите сделать этот запрос с помощью Django ORM (если я не ошибаюсь). Вы можете сделать это, используя Q Expression в Django (https://docs.djangoproject.com/en/4.0/topics/db/queries/#s-complex-lookups-with-q-objects). Для != можно использовать знак ~. В вашем случае запрос будет выглядеть следующим образом
Post.objects.filter(~Q(<column_name>=<value>))
Другой способ использования метода exclude (https://docs.djangoproject.com/en/4.0/ref/models/querysets/#s-exclude)
Post.objects.exclude(<column_name>=<value>)
Оба запроса генерируют один и тот же необработанный запрос в вашем случае:
SELECT * FROM <table_name> WHERE NOT (<column_name>=<value)
Если вы хотите выполнить необработанный запрос, то можете использовать метод raw (https://docs.djangoproject.com/en/4.0/topics/db/sql/)
posts = Post.objects.raw("SELECT * FROM table_name WHERE column_name != %s;", [value])
Если вы хотите выполнить пользовательский необработанный запрос напрямую, то используйте курсор from django.db connection (https://docs.djangoproject.com/en/4.0/topics/db/sql#s-executing-custom-sql-directly)