Home > Software design >  QuerySet in Django
QuerySet in Django

Time:12-29

How can I perform this SQL query SELECT * FROM table_name WHERE culumm_name != value in the QuerySet of Django

I tried this but isn't correct way.. enter image description here

CodePudding user response:

To execute sql queries just use raw method of Model like this:

posts = Post.objects.raw("SELECT * FROM table_name WHERE column_name != %s;", [value])
for post in posts:
   # do stuff with post object

But i don't think you need raw query (unless you want to get rid of ORM overhead to fetch records quicker) you can just use ORM like this:

posts = Post.objects.all().exclude(column_name=value)

CodePudding user response:

You can do it using Q:

from django.db.models import Q


posts = Post.objects.filter(~Q(column_name=value))

CodePudding user response:

I think you want to do this query using Django ORM (If I am not wrong). You can do this using Q Expression in Django (https://docs.djangoproject.com/en/4.0/topics/db/queries/#s-complex-lookups-with-q-objects). For != you can use ~ sign. In your case, the query will look like this

Post.objects.filter(~Q(<column_name>=<value>))

Another way to use exclude method (https://docs.djangoproject.com/en/4.0/ref/models/querysets/#s-exclude)

Post.objects.exclude(<column_name>=<value>)

Both queries generate the same raw query in your case:

SELECT * FROM <table_name> WHERE NOT (<column_name>=<value) 

If you want to do the raw query then you can use raw method (https://docs.djangoproject.com/en/4.0/topics/db/sql/)

posts = Post.objects.raw("SELECT * FROM table_name WHERE column_name != %s;", [value])

If you want to execute a custom raw query directly then use cursor from django.db connection (https://docs.djangoproject.com/en/4.0/topics/db/sql#s-executing-custom-sql-directly)

  • Related