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
Instrukcje do ćwiczenia
- Użyj pętli
while, która sprawdza, czymore_resultsjest prawdziwe. - Wewnątrz pętli wywołaj metodę
.fetchmany()naresults_proxy, aby pobierać50rekordów naraz i zapisywać je jakopartial_results. - Po pobraniu rekordów, jeśli
partial_resultsjest pustą listą (czyli równa się[]), ustawmore_resultsnaFalse. - Przejdź pętlą po
partial_resultsi: jeślirow.statejest kluczem w słownikustate_count, zwiększstate_count[row.state]o 1; w przeciwnym razie ustawstate_count[row.state]na 1. - Po zakończeniu pętli
whilezamknij ResultProxyresults_proxyza 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)