Aan de slagGa gratis aan de slag

Werken met blokken records

Fantastisch werk tot nu toe! Zoals Jason in de video besprak, kan het soms nodig zijn om met een grote ResultProxy te werken, terwijl je mogelijk niet genoeg geheugen hebt om alle resultaten in één keer te laden. Om dat te omzeilen kun je blokken met rijen ophalen uit de ResultProxy met de methode .fetchmany() binnen een loop. Met .fetchmany() geef je als argument het aantal records dat je wilt. Zodra je een lege lijst krijgt, zijn er geen rijen meer op te halen en heb je alle resultaten van de query verwerkt. Daarna moet je de methode .close() gebruiken om de verbinding met de database te sluiten.

Je kunt dit nu oefenen op een grote ResultProxy genaamd results_proxy die alvast voor je is klaargezet.

Deze oefening maakt deel uit van de cursus

Introductie tot databases in Python

Cursus bekijken

Oefeninstructies

  • Gebruik een while-loop die controleert of er more_results zijn.
  • Pas binnen de loop de methode .fetchmany() toe op results_proxy om telkens 50 records op te halen en sla die records op als partial_results.
  • Stel na het ophalen, als partial_results een lege lijst is (dus gelijk aan []), more_results in op False.
  • Loop over de partial_results en verhoog, als row.state een sleutel is in de dictionary state_count, state_count[row.state] met 1; stel anders state_count[row.state] in op 1.
  • Sluit na de while-loop de ResultProxy results_proxy met .close().
  • Verzend het antwoord om state_count af te drukken.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# 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)
Code bewerken en uitvoeren