07 Июл 2023
2 мин
1970

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

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

Содержание

Часто возникает необходимость сортировать результаты запроса в базу данных в обратном порядке — по убыванию. В 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(), не забыв при этом ее импортировать.

Содержание

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

Определи профессию по рисунку