किसी भी क्वेरी के लिए Django चेक मौजूद है


87

Django में यह जांचने के लिए कि क्वेरी के लिए कोई प्रविष्टि मौजूद है या नहीं

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

यह कैसे php में किया गया था

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

जवाबों:


87

उपयोग करें count():

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

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

उदाहरण के len()लिए, क्वेरीसैट का मूल्यांकन अभी तक नहीं किया गया है:

count()SELECT COUNT(*)पर्दे के पीछे प्रदर्शन करता है , इसलिए आपको count() पायथन ऑब्जेक्ट्स में रिकॉर्ड को लोड करने और len() परिणाम पर कॉल करने के बजाय हमेशा उपयोग करना चाहिए ।

इसे ध्यान में रखते हुए, जब क्वेरीस का मूल्यांकन किया जाता है, तो यह पढ़ने लायक हो सकता है।


यदि आप उपयोग करते हैं get(), उदाहरण के लिए scorm.objects.get(pk=someid), और ऑब्जेक्ट मौजूद नहीं है, तो एक ObjectDoesNotExistअपवाद उठाया जाता है:

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

अद्यतन: इसका उपयोग करना भी संभव है exists():

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

Trueयदि QuerySet में कोई परिणाम हैं, और Falseयदि नहीं , तो लौटाता है । यह क्वेरी को सबसे सरल और सबसे तेज़ तरीके से करने की कोशिश करता है, लेकिन यह सामान्य क्वेरी क्वेरी के समान लगभग एक ही क्वेरी को निष्पादित करता है।


51
if scorm.objects.filter(Header__id=qp.id).exists()
अलेक्जेंडर लेबेदेव

@ एलेक्स लेबेदेव: हाँ, यह विधि Django 1.2 में उपलब्ध होगी। धन्यवाद।
फेलिक्स क्लिंग

183

Django 1.2 के रूप में, आप उपयोग कर सकते हैं exists():

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

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

25
यह स्वीकृत उत्तर होना चाहिए। मौजूद () आम तौर पर गिनती () की तुलना में काफी तेज है।
frmdstryr

1
यह .objects.get(pk=...)मार्ग से भी तेज प्रतीत होता है
ब्रैड सोलोमन

0

यह मेरे लिए काम किया!

अगर some_queryset.objects.all () मौजूद है (): प्रिंट करें ("यह तालिका खाली नहीं है")

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.