यह वह जगह है django docs on the queryset iterator()
method से:जब उपयोग करने के लिए या Django ORM में इटरेटर का उपयोग नहीं()
एक क्वेरीसमूह आम तौर पर उसके परिणामों आंतरिक रूप से कैश ताकि बार-बार मूल्यांकन अतिरिक्त प्रश्नों में परिणाम नहीं है। इसके विपरीत, इटेटरेटर() परिणाम परिणाम सीधे, क्वेरीज़ स्तर पर किसी भी कैशिंग के बिना पढ़ेगा (आंतरिक रूप से, डिफॉल टी इटेटर कॉलर इटेटर() और वापसी मूल्य कैश करता है)। एक प्रश्नोत्तरी के लिए जो बड़ी संख्या में ऑब्जेक्ट देता है जिन्हें आपको केवल एक बार पहुंचने की आवश्यकता होती है, इससे बेहतर प्रदर्शन और स्मृति में महत्वपूर्ण कमी हो सकती है।
पढ़ने के बाद, मैं अभी भी उलझन में हूं: बढ़ी हुई प्रदर्शन और स्मृति में कमी के बारे में बताता है कि हमें केवल iterator()
विधि का उपयोग करना चाहिए। क्या कोई अच्छे और बुरे मामलों के कुछ उदाहरण iterator()
उपयोग कर सकता है?
भले ही क्वेरी परिणाम कैश नहीं किए गए हैं, भले ही वे वास्तव में मॉडल को एक से अधिक बार एक्सेस करना चाहते हैं, तो क्या कोई ऐसा नहीं कर सकता है?
saved_queries = list(Model.objects.all().iterator())
मुझे लगता है कि यह मॉडल आकार का मामला है ... यदि यह बड़ा है तो शायद आप स्मृति में चारों ओर एक गुच्छा लटकना नहीं चाहते हैं ... –