Django एनोटेशन औसत, न्यूनतम/अधिकतम, आदि के लिए बहुत अच्छा है। यह भी गणना करता है। तो क्या यह वही SQL उत्पन्न करता है जैसे कि मैंने क्वेरीसेट पर पुराने .count() का उपयोग किया था? या यह कुछ मामलों में एसक्यूएल अधिक कुशल एसक्यूएल उत्पन्न करता है? या बदतर एसक्यूएल?django में, कुल (गणना()) किसी भी तरह से .count() से तेज़ या बेहतर है?
क्षमा करें, स्पष्ट करने के लिए, मेरा मतलब गिनती() ऑपरेशन की तुलना समग्र (गणना (आईडी ')) के साथ करना है जहां आईडी तालिका का पीके है।
तो इसके साथ, मेरा मानना है कि ब्रायन का सही जवाब है। संक्षेप में, गिनती() कुल योग का एक विशेष मामला है()।
माना जाता है कि पिज्जा और टॉपिंग में एम 2 एम रिश्ते है, पिज्जा पर कुल कॉलिंग आपकी दूसरी पंक्ति में प्रत्येक पिज्जा के लिए टॉपिंग की कुल संख्या वापस नहीं करेगा; यह पिज्जा से टॉपिंग में शामिल हो जाएगा और मूल रूप से जुड़ने की संख्या की गणना करेगा। प्रत्येक पिज्जा के लिए टॉपिंग की संख्या प्राप्त करने के लिए आपको aggreate() के बजाय एनोटेट() का उपयोग करने की आवश्यकता है। –
क्षमा करें। मैं अपने विवरण पर बंद था जो कुल मिलाकर वापस आ गया है। –
अंतर को हाइलाइट करने के लिए वर्णन और जोड़ा गया 'एनोटेट' संस्करण अपडेट किया गया है यदि एक टॉपिंग एक से अधिक पिज्जा से जुड़ा हुआ है, तो यह 'Pizza.objects.aggregate (topping_count = count (' toppings ') में एकाधिक पिज्जा में शामिल हो जाएगा) ' और इस प्रकार यह गिनती टॉपिंग की कुल संख्या से अधिक वापस आ जाएगी। पिज्जा से जुड़ी टॉपिंग्स की कुल संख्या प्राप्त करने के लिए (डुप्लिकेट गिनती के बिना), शायद आप 'Topping.objects.exclude (pizza_set = none) .count() 'जैसे कुछ करना चाहते हैं। –