Lucrul cu blocuri de înregistrări
Excelentă treabă până acum! Așa cum a explicat Jason în videoclip, uneori ai nevoie să lucrezi cu un ResultProxy de dimensiuni mari, iar memoria disponibilă poate fi insuficientă pentru a încărca toate rezultatele deodată. Pentru a rezolva această problemă, poți prelua blocuri de rânduri din ResultProxy folosind metoda .fetchmany() într-o buclă. Cu .fetchmany(), specifici numărul de înregistrări pe care vrei să le obții. Când primești o listă goală, înseamnă că nu mai există rânduri de preluat și că ai procesat toate rezultatele interogării. Apoi trebuie să folosești metoda .close() pentru a închide conexiunea la baza de date.
Acum vei avea ocazia să exersezi acest lucru pe un ResultProxy de dimensiuni mari numit results_proxy, care a fost preîncărcat pentru tine.
Acest exercițiu face parte din cursul
Introducere în baze de date în Python
Instrucțiuni pentru exercițiu
- Folosește o buclă
whilecare verifică dacămore_resultseste adevărat. - În interiorul buclei, aplică metoda
.fetchmany()peresults_proxypentru a prelua câte50de înregistrări odată și stochează acele înregistrări capartial_results. - După preluarea înregistrărilor, dacă
partial_resultseste o listă goală (adică este egală cu[]), seteazămore_resultslaFalse. - Parcurge
partial_resultsși, dacărow.stateeste o cheie în dicționarulstate_count, incrementeazăstate_count[row.state]cu 1; altfel, seteazăstate_count[row.state]la 1. - După bucla
while, închide ResultProxy-ulresults_proxyfolosind.close(). - Trimite răspunsul pentru a afișa
state_count.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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)