अक्सर मैं खुद को Django में एक क्वेरीसेट से पहली वस्तु प्राप्त करना चाहता हूं, या None
अगर कोई नहीं है तो वापस लौटना चाहता हूं । ऐसा करने के बहुत सारे तरीके हैं जो सभी काम करते हैं। लेकिन मैं सोच रहा हूं कि कौन सा कलाकार सबसे अच्छा है।
qs = MyModel.objects.filter(blah = blah)
if qs.count() > 0:
return qs[0]
else:
return None
क्या इसका परिणाम दो डेटाबेस कॉल में होता है? जो बेकार लगता है। क्या यह कोई तेज है?
qs = MyModel.objects.filter(blah = blah)
if len(qs) > 0:
return qs[0]
else:
return None
एक और विकल्प होगा:
qs = MyModel.objects.filter(blah = blah)
try:
return qs[0]
except IndexError:
return None
यह एक एकल डेटाबेस कॉल उत्पन्न करता है, जो अच्छा है। लेकिन बहुत समय के लिए एक अपवाद ऑब्जेक्ट बनाने की आवश्यकता होती है, जो कि एक बहुत ही स्मृति-गहन चीज है जब आपको वास्तव में आवश्यकता होती है एक तुच्छ इफ-टेस्ट।
मैं केवल एकल डेटाबेस कॉल के साथ और अपवाद वस्तुओं के साथ स्मृति को मंथन किए बिना कैसे कर सकता हूं?
first()
और last()
सुविधा विधियों को जोड़ा है : docs.djangoproject.com/en/dev/ref/models/querysets/#first
len()
क्वेरीसेट पर उपयोग न करें , हमेशा उपयोग करें.count()
।