การทำงานกับข้อมูลเป็นชุด
ทำได้ยอดเยี่ยมมาก! อย่างที่ Jason อธิบายในวิดีโอ บางครั้งเมื่อต้องทำงานกับ ResultProxy ขนาดใหญ่ อาจไม่มีหน่วยความจำเพียงพอสำหรับโหลดผลลัพธ์ทั้งหมดในครั้งเดียว วิธีแก้ปัญหานี้คือการดึงข้อมูลเป็นชุดจาก ResultProxy โดยใช้เมธอด .fetchmany() ภายในลูป โดยส่งจำนวนระเบียนที่ต้องการเป็น argument เมื่อได้รับลิสต์ว่าง แสดงว่าไม่มีแถวเหลือให้ดึงแล้ว และประมวลผลผลลัพธ์ของคิวรีครบทั้งหมดแล้ว จากนั้นให้ใช้เมธอด .close() เพื่อปิดการเชื่อมต่อกับฐานข้อมูล
ตอนนี้จะได้ฝึกใช้งานกับ ResultProxy ขนาดใหญ่ชื่อ results_proxy ที่เตรียมไว้ให้แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python เบื้องต้นสำหรับฐานข้อมูล
คำแนะนำการฝึกหัด
- ใช้ลูป
whileที่ตรวจสอบว่ายังมีmore_resultsอยู่หรือไม่ - ภายในลูป เรียกเมธอด
.fetchmany()บนresults_proxyเพื่อดึงข้อมูลครั้งละ50ระเบียน แล้วเก็บไว้ในpartial_results - หลังจากดึงข้อมูลแล้ว ถ้า
partial_resultsเป็นลิสต์ว่าง (กล่าวคือ มีค่าเท่ากับ[]) ให้กำหนดmore_resultsเป็นFalse - วนลูปใน
partial_resultsและถ้าrow.stateเป็น key ในดิกชันนารีstate_countให้เพิ่มค่าstate_count[row.state]ขึ้น 1 มิฉะนั้นให้กำหนดstate_count[row.state]เป็น 1 - หลังจากลูป while เสร็จสิ้น ให้ปิด ResultProxy
results_proxyด้วย.close() - ส่งคำตอบเพื่อแสดงผล
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)