Django check for any exists for a query

PythonDjangoDjango Views

Python Problem Overview


In django how to check whether any entry exists for a query

sc=scorm.objects.filter(Header__id=qp.id)

This was how it was done in php

if(mysql_num_rows($resultn)) {
    // True condition
    }
else {
    // False condition
    }

Python Solutions


Solution 1 - Python

As of Django 1.2, you can use exists():

https://docs.djangoproject.com/en/dev/ref/models/querysets/#exists

if some_queryset.filter(pk=entity_id).exists():
    print("Entry contained in queryset")

Solution 2 - Python

You can use exists():

if scorm.objects.filter(Header__id=qp.id).exists():
    ....

> Returns True if the QuerySet contains any results, and False if not. This tries to perform the query in the simplest and fastest way possible, but it does execute nearly the same query as a normal QuerySet query.

Older versions: (<1.2)

Use count():

sc=scorm.objects.filter(Header__id=qp.id)

if sc.count() > 0:
   ...

The advantage over e.g. len() is, that the QuerySet is not yet evaluated:

> count() performs a SELECT COUNT(*) behind the scenes, so you should always use count() rather than loading all of the record into Python objects and calling len() on the result.

Having this in mind, When QuerySets are evaluated can be worth reading.


If you use get(), e.g. scorm.objects.get(pk=someid), and the object does not exists, an ObjectDoesNotExist exception is raised:

from django.core.exceptions import ObjectDoesNotExist
try:
    sc = scorm.objects.get(pk=someid)
except ObjectDoesNotExist:
    print ...

Solution 3 - Python

Django provides a method called exists() to check if results exists for our query. exists() method return 'True' or 'False'

Class Company(models.Model):
      name = models.CharField(max_length=100)
      year_established = models.DateField()

Class Car(models.Model):
     name = models.CharField(max_length=100)
     company = models.ForeignKey(Company,related_name='car_company',on_delete=models.CASCADE)

following are the queries with exists() method

1. Car.objects.filter(name='tesla').exists()  
2. Company.objects.filter(year_established='date').exists()

using exists in related field - here foreign key

  1. Car.objects.filter(company__name='tesla').exists()

you can give any filter available and use exists() method

Solution 4 - Python

this worked for me!

> if some_queryset.objects.all().exists(): > print("this table is not empty")

Solution 5 - Python

len(queryset) also works.

sc = scorm.objects.filter(Header__id=qp.id)

if len(sc):
    ....

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHulkView Question on Stackoverflow
Solution 1 - PythonsdornanView Answer on Stackoverflow
Solution 2 - PythonFelix KlingView Answer on Stackoverflow
Solution 3 - PythonSarath Chandran KView Answer on Stackoverflow
Solution 4 - Pythoni_m_brundaView Answer on Stackoverflow
Solution 5 - PythonSuperNovaView Answer on Stackoverflow