НачатьНачать бесплатно

Обработка данных блоками

Отличная работа! Как Джейсон объяснил в видео, иногда приходится работать с большим 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)
Редактировать и запускать код