Začněte nyníZačněte zdarma

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

Zobrazit kurz

Pokyny k cvičení

  • Použij cyklus while, který kontroluje, zda je more_results pravda.
  • Uvnitř cyklu zavolej metodu .fetchmany() na results_proxy, aby se načítalo vždy 50 záznamů najednou, a tyto záznamy ulož do partial_results.
  • Po načtení záznamů zkontroluj, zda je partial_results prázdný seznam (tedy zda se rovná []); pokud ano, nastav more_results na False.
  • Projdi partial_results a pokud je row.state klíčem ve slovníku state_count, zvyš state_count[row.state] o 1; jinak nastav state_count[row.state] na 1.
  • Po ukončení cyklu while zavři ResultProxy results_proxy pomocí .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)
Upravit a spustit kód