Arbeta med block av poster
Bra jobbat hittills! Som Jason tog upp i videon kan det ibland uppstå situationer där du arbetar med en stor ResultProxy men saknar minne för att läsa in alla resultat på en gång. För att lösa det problemet kan du hämta block av rader från ResultProxy med hjälp av metoden .fetchmany() inuti en loop. Skicka in antalet poster du vill hämta som argument till .fetchmany(). När du får tillbaka en tom lista finns det inga fler rader att hämta, och du har bearbetat alla resultat från frågan. Sedan behöver du använda metoden .close() för att stänga anslutningen till databasen.
Nu får du öva på detta med hjälp av en stor ResultProxy som heter results_proxy, vilken redan är inläst åt dig.
Den här övningen är en del av kursen
Introduktion till databaser i Python
Övningsinstruktioner
- Använd en
while-loop som kontrollerar ommore_resultsär sant. - Inuti loopen anropar du metoden
.fetchmany()påresults_proxyför att hämta50poster i taget och lagra dem ipartial_results. - Efter att posterna hämtats: om
partial_resultsär en tom lista (dvs. lika med[]), sättmore_resultstillFalse. - Loopa igenom
partial_resultsoch ökastate_count[row.state]med 1 omrow.stateredan är en nyckel istate_count-ordboken; annars sättstate_count[row.state]till 1. - Efter while-loopen stänger du ResultProxy
results_proxymed.close(). - Skicka in svaret för att skriva ut
state_count.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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)