IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Usa un ciclo while che controlli se ci sono more_results.
  • All’interno del ciclo, applica il metodo .fetchmany() a results_proxy per ottenere 50 record alla volta e salva questi record in partial_results.
  • Dopo aver recuperato i record, se partial_results è una lista vuota (cioè se è uguale a []), imposta more_results a False.
  • Cicla su partial_results e, se row.state è una chiave nel dizionario state_count, incrementa state_count[row.state] di 1; altrimenti imposta state_count[row.state] a 1.
  • Dopo il ciclo while, chiudi il ResultProxy results_proxy usando .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)
Modifica ed esegui il codice