Zacznij terazZacznij za darmo

Praca na blokach rekordów

Świetna robota! Jak omówiono w filmie, czasem trzeba pracować z dużym ResultProxy, a pamięć może nie wystarczyć, aby załadować wszystkie wyniki naraz. Aby obejść ten problem, możesz pobierać wiersze z ResultProxy blokami – wystarczy użyć metody .fetchmany() wewnątrz pętli. Metodzie .fetchmany() przekazujesz liczbę rekordów, które chcesz pobrać jednorazowo. Gdy metoda zwróci pustą listę, oznacza to, że nie ma już więcej wierszy do pobrania i wszystkie wyniki zapytania zostały przetworzone. Na koniec użyj metody .close(), aby zamknąć połączenie z bazą danych.

Teraz masz okazję przećwiczyć to na dużym ResultProxy o nazwie results_proxy, który został wcześniej załadowany i jest gotowy do pracy.

To ćwiczenie jest częścią kursu

Wprowadzenie do baz danych w Pythonie

Zobacz kurs

Instrukcje do ćwiczenia

  • Użyj pętli while, która sprawdza, czy more_results jest prawdziwe.
  • Wewnątrz pętli wywołaj metodę .fetchmany() na results_proxy, aby pobierać 50 rekordów naraz i zapisywać je jako partial_results.
  • Po pobraniu rekordów, jeśli partial_results jest pustą listą (czyli równa się []), ustaw more_results na False.
  • Przejdź pętlą po partial_results i: jeśli row.state jest kluczem w słowniku state_count, zwiększ state_count[row.state] o 1; w przeciwnym razie ustaw state_count[row.state] na 1.
  • Po zakończeniu pętli while zamknij ResultProxy results_proxy za pomocą .close().
  • Prześlij odpowiedź, aby wyświetlić state_count.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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)
Edytuj i uruchom kod