Опрацювання блоків записів
Чудова робота! Як Джейсон пояснював у відео, інколи доводиться працювати з великим ResultProxy, і може не вистачити пам'яті, щоб завантажити всі результати одразу. Щоб обійти цю проблему, ви можете отримувати блоки рядків із ResultProxy за допомогою методу .fetchmany() всередині циклу. У .fetchmany() передайте аргументом кількість потрібних записів. Коли ви отримаєте порожній список, це означає, що більше рядків немає, і ви обробили всі результати запиту. Після цього потрібно викликати метод .close(), щоб закрити з'єднання з базою даних.
Тепер ви потренуєтеся на великому ResultProxy під назвою results_proxy, який уже підготовлено для роботи.
Ця вправа є частиною курсу
Вступ до баз даних у Python
Інструкції до вправи
- Використайте цикл
while, який перевіряє, чи єmore_results. - Усередині циклу застосуйте метод
.fetchmany()доresults_proxy, щоб отримувати по50записів за раз, і збережіть ці записи якpartial_results. - Після отримання записів, якщо
partial_results— порожній список (тобто дорівнює[]), встановітьmore_resultsуFalse. - Ітеруйте по
partial_resultsі, якщоrow.stateє ключем у словникуstate_count, збільшітьstate_count[row.state]на 1; інакше встановітьstate_count[row.state]рівним 1. - Після циклу while закрийте ResultProxy
results_proxyза допомогою.close(). - Надішліть відповідь, щоб надрукувати
state_count.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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)