ÎncepețiÎncepe gratuit

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

Vezi cursul

Instrucțiuni pentru exercițiu

  • Folosește o buclă while care verifică dacă more_results este adevărat.
  • În interiorul buclei, aplică metoda .fetchmany() pe results_proxy pentru a prelua câte 50 de înregistrări odată și stochează acele înregistrări ca partial_results.
  • După preluarea înregistrărilor, dacă partial_results este o listă goală (adică este egală cu []), setează more_results la False.
  • Parcurge partial_results și, dacă row.state este o cheie în dicționarul state_count, incrementează state_count[row.state] cu 1; altfel, setează state_count[row.state] la 1.
  • După bucla while, închide ResultProxy-ul results_proxy folosind .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)
Editează și rulează codul