LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Verwende eine while-Schleife, die prüft, ob more_results vorhanden sind.
  • Rufe innerhalb der Schleife auf results_proxy die Methode .fetchmany() auf, um jeweils 50 Datensätze zu holen, und speichere diese als partial_results.
  • Setze, nachdem die Datensätze geholt wurden, more_results auf False, wenn partial_results eine leere Liste ist (also []).
  • Iteriere über die partial_results und erhöhe, falls row.state ein Schlüssel im Dictionary state_count ist, state_count[row.state] um 1; andernfalls setze state_count[row.state] auf 1.
  • Schließe nach der while-Schleife den ResultProxy results_proxy mit .close().
  • Sende die Antwort, um state_count auszugeben.

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)
Code bearbeiten und ausführen