РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
83 of 818 menu

Метод iterator

Метод iterator применяется к QuerySet и возвращает итератор, который загружает записи из базы данных небольшими порциями, а не все сразу. Это позволяет значительно снизить потребление памяти при обработке большого количества записей. Метод особенно полезен при работе с многомиллионными таблицами, где загрузка всех объектов в память может привести к переполнению памяти.

По умолчанию метод использует курсор сервера для поточной загрузки данных. Размер порции можно настроить с помощью параметра chunk_size, который определяет количество записей, загружаемых за один запрос к базе данных.

Синтаксис

Model.objects.all().iterator(chunk_size=2000)

Пример

Давайте обработаем все статьи из базы данных без загрузки их всех в память:

from myapp.models import Article res = Article.objects.all().iterator() for article in res: print(article.title)

Результат выполнения кода:

"First article" "Second article" "Third article" "Fourth article" "Fifth article"

Пример

Используем метод с указанием размера порции для более эффективной обработки данных:

from myapp.models import User res = User.objects.filter(is_active=True).iterator(chunk_size=1000) for user in res: print(user.username)

Результат выполнения кода:

"ivanov" "petrov" "sidorov" "smirnov" "volkov"

Пример

Объединим iterator с фильтрацией и агрегацией для обработки больших объемов данных:

from myapp.models import Order from django.db.models import Sum res = Order.objects.filter(status='completed').iterator(chunk_size=500) total_sum = 0 for order in res: total_sum += order.amount print(total_sum)

Результат выполнения кода:

"124500.50"

Смотрите также

  • метод all,
    который возвращает все записи из QuerySet
  • метод only,
    который загружает только указанные поля модели
  • метод defer,
    который откладывает загрузку указанных полей
  • метод values,
    который возвращает QuerySet словарей вместо объектов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить