Zen of Python
18.7K subscribers
1.49K photos
202 videos
38 files
3.7K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
iterator не ограничивает память драйвера

Для одноразового обхода большой выборки у QuerySet есть iterator(). Он не наполняет обычный кеш результатов самого QuerySet. Если выборка уже была вычислена, вызов iterator выполнит запрос ещё раз.

В Django 5.2 его можно сочетать с prefetch_related(), явно передав chunk_size. Более крупная порция уменьшает число запросов для подгрузки связей, но требует больше памяти. При нескольких связях учитывайте ещё и разрастание списка для SQL IN.

Гарантии «в памяти только одна порция» здесь нет. Документация разделяет уровни: MySQL-драйвер загружает весь результат, а потоковое чтение PostgreSQL зависит от серверных курсоров и настройки пула соединений. Проверять расход памяти нужно на конкретном backend.
Хеши pip должны покрывать и зависимости

Добавить хеш только главному пакету недостаточно для строгой установки. Команда python -m pip install --require-hashes -r requirements.txt требует закрепить все требования, включая транзитивные зависимости, и указать для них локальные хеши разрешённых артефактов.

Версию фиксируют через == либо задают конкретный URL или путь. Если разрешены разные wheels, одному пакету может понадобиться несколько хешей. Хеш из ссылки самого индекса не заменяет локальный список: индекс не должен сам определять, какой файл вы считаете доверенным.

В текущем руководстве pip описан флаг, добавленный в версии 26.2: --no-require-hashes отключает автоматическое требование хешей для всех строк. Для строгой политики включайте режим явно. Совпавший хеш подтверждает выбранный артефакт, но не безвредность кода внутри.