Práce s bloky záznamů
Skvělá práce! Jak Jason zmínil ve videu, někdy potřebuješ pracovat s velkým ResultProxy, ale nemáš dostatek paměti na načtení všech výsledků najednou. Tento problém vyřešíš tak, že budeš načítat řádky po blocích pomocí metody .fetchmany() uvnitř cyklu. Metodě .fetchmany() předáš jako argument počet záznamů, které chceš načíst. Jakmile dostaneš prázdný seznam, víš, že už nejsou žádné další řádky a všechny výsledky dotazu jsou zpracované. Nakonec je potřeba uzavřít připojení k databázi pomocí metody .close().
Nyní si to vyzkoušíš na velkém ResultProxy s názvem results_proxy, který už je pro tebe předpřipravený.
Toto cvičení je součástí kurzu
Introduction to Databases in Python
Pokyny k cvičení
- Použij cyklus
while, který kontroluje, zda jemore_resultspravda. - Uvnitř cyklu zavolej metodu
.fetchmany()naresults_proxy, aby se načítalo vždy50záznamů najednou, a tyto záznamy ulož dopartial_results. - Po načtení záznamů zkontroluj, zda je
partial_resultsprázdný seznam (tedy zda se rovná[]); pokud ano, nastavmore_resultsnaFalse. - Projdi
partial_resultsa pokud jerow.stateklíčem ve slovníkustate_count, zvyšstate_count[row.state]o 1; jinak nastavstate_count[row.state]na 1. - Po ukončení cyklu
whilezavři ResultProxyresults_proxypomocí.close(). - Odešli odpověď a zobraz
state_count.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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)