Lavorare su blocchi di record
Ottimo lavoro finora! Come ha spiegato Jason nel video, a volte potresti dover lavorare su un ResultProxy di grandi dimensioni e potresti non
avere memoria a sufficienza per caricare tutti i risultati in una volta. Per aggirare il problema,
puoi ottenere blocchi di righe dal ResultProxy usando il metodo .fetchmany() all’interno di un ciclo. Con
.fetchmany(), passagli come argomento il numero di record che vuoi. Quando
ottieni una lista vuota, non ci sono più righe da recuperare e hai
elaborato tutti i risultati della query. Poi devi usare il metodo .close()
per chiudere la connessione al database.
Ora avrai modo di esercitarti su un ResultProxy di grandi dimensioni chiamato results_proxy, già caricato per te.
Questo esercizio fa parte del corso
Introduzione ai database in Python
Istruzioni dell'esercizio
- Usa un ciclo
whileche controlli se ci sonomore_results. - All’interno del ciclo, applica il metodo
.fetchmany()aresults_proxyper ottenere50record alla volta e salva questi record inpartial_results. - Dopo aver recuperato i record, se
partial_resultsè una lista vuota (cioè se è uguale a[]), impostamore_resultsaFalse. - Cicla su
partial_resultse, serow.stateè una chiave nel dizionariostate_count, incrementastate_count[row.state]di 1; altrimenti impostastate_count[row.state]a 1. - Dopo il ciclo while, chiudi il ResultProxy
results_proxyusando.close(). - Invia la risposta per stampare
state_count.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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)