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)

Вернуться на верх