Mit Blöcken von Datensätzen arbeiten
Bis hierhin großartig! Wie Jason im Video erklärt hat, kann es vorkommen, dass du mit einem großen ResultProxy arbeitest, aber nicht genug Speicher hast, um alle Ergebnisse auf einmal zu laden. Um dieses Problem zu umgehen, kannst du mit der Methode .fetchmany() innerhalb einer Schleife Blöcke von Zeilen aus dem ResultProxy holen. Mit .fetchmany() übergibst du die Anzahl der gewünschten Datensätze als Argument. Wenn eine leere Liste zurückkommt, gibt es keine weiteren Zeilen abzuholen und du hast alle Ergebnisse der Abfrage verarbeitet. Anschließend musst du mit der Methode .close() die Verbindung zur Datenbank schließen.
Jetzt kannst du das an einem großen ResultProxy namens results_proxy üben, der bereits für dich vorbereitet wurde.
Diese Übung ist Teil des Kurses
Einführung in Datenbanken mit Python
Anleitung zur Übung
- Verwende eine
while-Schleife, die prüft, obmore_resultsvorhanden sind. - Rufe innerhalb der Schleife auf
results_proxydie Methode.fetchmany()auf, um jeweils50Datensätze zu holen, und speichere diese alspartial_results. - Setze, nachdem die Datensätze geholt wurden,
more_resultsaufFalse, wennpartial_resultseine leere Liste ist (also[]). - Iteriere über die
partial_resultsund erhöhe, fallsrow.stateein Schlüssel im Dictionarystate_countist,state_count[row.state]um 1; andernfalls setzestate_count[row.state]auf 1. - Schließe nach der while-Schleife den ResultProxy
results_proxymit.close(). - Sende die Antwort, um
state_countauszugeben.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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)