सीधे मूल्यों () पर की तुलना में values_list () पर क्वेरी को कनवर्ट करना अधिक मेमोरी कुशल होगा। चूंकि विधि मान () तानाशाह (कुंजी: मूल्य जोड़े) की सूची का एक क्वेरीसेट देता है, मान_लिस्ट () केवल टपल (शुद्ध डेटा) की सूची देता है। यह लगभग 50% मेमोरी बचाएगा, बस आपको कॉलम की जानकारी सेट करने की आवश्यकता है जब आप pd.DataFrame () कहते हैं।
विधि 1:
क्वेरीसेट = model.xxx.objects.values ("ए", "बी", "सी", "डी")
df = pd.DataFrame (सूची (क्वेरीसेट)) ## बहुत स्मृति का उपभोग करता है
#df = pd.DataFrame.from_records (क्वेरीसेट) ## काम करता है लेकिन स्मृति उपयोग पर कोई बहुत अधिक परिवर्तन नहीं
विधि 2:
क्वेरीसेट = model.xxx.objects.values_list ("ए", "बी", "सी", "डी")
df = pd.DataFrame (सूची (क्वेरीसेट), कॉलम = ["A", "B", "C", "D"]) ## यह 50% मेमोरी बचाएगा
#df = pd.DataFrame.from_records (क्वेरीसेट, कॉलम = ["ए", "बी", "सी", "डी"]) ## यह काम नहीं करता है। डेटाटाइप के साथ क्रैश की गई सूची नहीं है।
मैंने अपने प्रोजेक्ट पर> 1 मिलियन पंक्तियों के डेटा के साथ यह परीक्षण किया, पीक मेमोरी 2G से 1G तक कम हो जाती है।