order_by, срезы и ленивая обработка
Сортируйте, ограничивайте результаты и узнавайте, когда запросы обращаются к DB
«order_by, срезы и ленивая обработка» — бесплатный урок Django Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.
Упорядочить строки
У строк базы данных нет гарантированного порядка. Вызовите order_by(), чтобы отсортировать QuerySet по выбранному полю.
Book.objects.order_by("title")Сортировка по убыванию
Поставьте знак минус перед именем поля, чтобы изменить порядок и вывести сначала самое большое или самое новое значение.
Book.objects.order_by("-year")Сортировка по нескольким полям
Передайте несколько полей в order_by(), и Django отсортирует данные сначала по первому полю, а при совпадении значений — по следующему.
Book.objects.order_by("author", "-year")Взять первые несколько
Срез QuerySet с помощью синтаксиса Python ограничивает количество получаемых строк — это отлично подходит для списка из пяти лучших результатов.
Book.objects.order_by("-year")[:5]Выбрать фрагмент
Укажите начало и конец среза, чтобы получить фрагмент из середины. Django самостоятельно преобразует это в LIMIT и OFFSET. ✂️
Book.objects.all()[10:20]Отрицательные срезы запрещены
Нельзя использовать отрицательный индекс для QuerySet. Чтобы получить последние строки, сначала измените порядок, а затем примените срез.
Book.objects.order_by("-id")[:1]Запросы выполняются лениво
Создание QuerySet не обращается к базе данных. Django сохраняет ленивое выполнение и ждёт, пока данные действительно не понадобятся.
qs = Book.objects.filter(published=True)Что запускает запрос
Вычисление происходит, когда Вы проходите по результатам в цикле, вызываете list() или проверяете длину. Именно в этот момент наконец выполняется SQL-запрос.
for book in qs:
print(book.title)Создать сейчас, выполнить позже
Ленивое выполнение позволяет объединять фильтры в цепочку на протяжении нескольких строк, а Django всё равно отправляет в конце только один объединённый запрос.
qs = Book.objects.filter(year__gte=2020).order_by("title")Кэширование результатов
После вычисления QuerySet Django кэширует строки. Повторное использование той же переменной позволяет не обращаться к базе данных дважды.
Срез сохраняет ленивость
Невычисленный срез всё ещё является ленивым, поэтому LIMIT добавляется в SQL, а строки не обрезаются в Python.
top = Book.objects.order_by("-year")[:3]Быстрая проверка
Вы создали отфильтрованный QuerySet, но не проходите по нему в цикле и не преобразуете его в список. Когда выполняется SQL-запрос?
Повторение
У Вас получилось! order_by() сортирует, срез ограничивает строки на уровне SQL, а ленивое вычисление означает, что запросы выполняются только при использовании. ⚡
Изучай Python с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «order_by, срезы и ленивая обработка» бесплатный?
Да — полный текст урока «order_by, срезы и ленивая обработка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.
Чему я научусь в уроке «order_by, срезы и ленивая обработка»?
Сортируйте, ограничивайте результаты и узнавайте, когда запросы обращаются к DB Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Django Academy?
Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «order_by, срезы и ленивая обработка»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Django Academy?
Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- all(), get() и filter()
- Поиск по полям и exclude()
- order_by, срезы и ленивая обработка
- values, values_list и count