Код Senior SQLAlchemy 2.0 обновлено

Сколько запросов сделает selectinload

Условие

SQLAlchemy selectinload отправляет id родителей пачками (по умолчанию по 500 в одном IN). Напишите count_queries(parents, per_batch, depth_counts): основной запрос загружает parents объектов; затем для каждого уровня вложенных selectinload из списка depth_counts (число загруженных объектов на этом уровне, которые становятся родителями для следующего) выполняется ceil(родителей / per_batch) запросов. Для первого уровня родители это parents, для следующих это значение предыдущего уровня из depth_counts. Уровень без родителей запросов не делает. Верните общее число запросов.

Примеры

count_queries(100, 500, [300]) // 2
count_queries(1200, 500, [3000]) // 4
count_queries(1200, 500, [3000, 10]) // 10

Как подойти

Подсказки: 2
  1. На каждом уровне ceil(родители / пачка) запросов.
  2. Родители следующего уровня это объекты, загруженные на текущем.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме