Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
07 Июл 2023
2 мин
2364

Использование ORDER BY DESC в SQLAlchemy

Часто возникает необходимость сортировать результаты запроса в базу данных в обратном порядке — по убыванию. В SQLAlchemy для этого используется метод

Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.

Часто возникает необходимость сортировать результаты запроса в базу данных в обратном порядке — по убыванию. В SQLAlchemy для этого используется метод order_by(). Он принимает в качестве аргумента выражение, по которому будет осуществляться сортировка.

Вот пример запроса, в котором результаты отсортированы по полю amount в возрастающем порядке:

query = (model.Session.query(model.Entry)
    .join(model.ClassificationItem)
    .join(model.EnumerationValue)
    .filter_by(id=c.row.id)
    .order_by(model.Entry.amount)
)

Однако, если попытаться сортировать результаты в обратном порядке, то есть по убыванию, используя следующий код:

.order_by(desc(model.Entry.amount))

вы получите ошибку: NameError: global name 'desc' is not defined. Это происходит потому, что функция desc() не была импортирована, и поэтому не определена в текущем контексте.

Чтобы исправить это, необходимо импортировать функцию desc() из модуля sqlalchemy. Это можно сделать, добавив следующую строку в начало файла:

from sqlalchemy import desc

Теперь можно использовать desc() в методе order_by(), чтобы сортировать результаты запроса по убыванию. Итак, весь запрос будет выглядеть так:

from sqlalchemy import desc

query = (model.Session.query(model.Entry)
    .join(model.ClassificationItem)
    .join(model.EnumerationValue)
    .filter_by(id=c.row.id)
    .order_by(desc(model.Entry.amount)) # результаты отсортированы по убыванию
)

В этом коде desc(model.Entry.amount) означает, что результаты запроса будут отсортированы по полю amount в порядке убывания.

Таким образом, для сортировки результатов запроса по убыванию в SQLAlchemy нужно использовать функцию desc(), не забыв при этом ее импортировать.

Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами в разработке для ответов на вопросы и разбора домашек.

Тест на профориентацию
За 10 минут узнайте, как ваш опыт пригодиться в IT индустрии
Подробнее
Тест на профориентацию

Добавить комментарий