रिकॉर्ड्स के ब्लॉक्स पर काम करना
अब तक बढ़िया काम! जैसा कि Jason ने वीडियो में समझाया, कभी-कभी आपको एक बड़े ResultProxy पर काम करने की ज़रूरत पड़ सकती है, और आपके पास एक ही बार में सभी रिज़ल्ट्स मेमोरी में लोड करने की क्षमता नहीं होती. इस समस्या से निपटने के लिए, आप लूप के भीतर .fetchmany() मेथड का उपयोग करके ResultProxy से पंक्तियों के ब्लॉक्स प्राप्त कर सकते हैं. .fetchmany() के साथ, उसे उन रिकॉर्ड्स की संख्या बताइए जो आप चाहते हैं. जब आपको खाली लिस्ट मिलती है, तो और पंक्तियाँ फेच करने के लिए नहीं बची होतीं, और आपने क्वेरी के सभी रिज़ल्ट्स प्रोसेस कर लिए होते हैं. फिर आपको डेटाबेस से कनेक्शन बंद करने के लिए .close() मेथड का उपयोग करना होता है.
अब आपको results_proxy नाम के एक बड़े ResultProxy पर यह अभ्यास करने का मौका मिलेगा, जिसे आपके लिए पहले से लोड किया गया है.
यह अभ्यास पाठ्यक्रम का हिस्सा है
Python में Databases का परिचय
अभ्यास निर्देश
- एक
whileलूप का उपयोग करें जो यह जाँचता रहे किmore_resultsहैं या नहीं. - लूप के अंदर,
results_proxyपर.fetchmany()मेथड लगाकर एक समय में50रिकॉर्ड्स लें और उन्हेंpartial_resultsके रूप में स्टोर करें. - रिकॉर्ड्स फेच करने के बाद, अगर
partial_resultsएक खाली लिस्ट है (यानी[]के बराबर है), तोmore_resultsकोFalseसेट करें. partial_resultsपर लूप कीजिए और अगरrow.state,state_countडिक्शनरी में एक key है, तोstate_count[row.state]को 1 से बढ़ाएँ; अन्यथाstate_count[row.state]को 1 सेट करें.- while लूप के बाद,
.close()का उपयोग करके ResultProxyresults_proxyको बंद करें. state_countप्रिंट कराने के लिए उत्तर सबमिट करें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
# Start a while loop checking for more results
while more_results:
# Fetch the first 50 results from the ResultProxy: partial_results
partial_results = ____
# if empty list, set more_results to False
if partial_results == []:
more_results = ____
# Loop over the fetched records and increment the count for the state
for row in ____:
if row.state in state_count:
____
else:
____
# Close the ResultProxy, and thus the connection
results_proxy.____
# Print the count by state
print(state_count)