SQLAlchemy: Как использовать ORDER BY по убыванию?
Как я могу использовать сортировку по убыванию в запросе SQLAlchemy, подобном следующему?
Этот запрос работает, но возвращает результаты в порядке возрастания:
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
.
Как правильно реализовать сортировку по убыванию в данном случае?
3 ответ(ов)
Одним из вариантов, который вы можете рассмотреть, является использование следующего кода:
from sqlalchemy.sql import text
...
.order_by(text("name desc"))
Это приведет к следующему SQL-запросу: ORDER BY name desc
. Однако стоит отметить, что недостатком этого подхода является явное указание имени столбца в операции сортировки.
Вы можете попробовать использовать метод .order_by(ClientTotal.id.desc())
, чтобы отсортировать результаты по убыванию идентификатора. Вот пример кода, который иллюстрирует это:
session = Session()
auth_client_name = 'client3'
result_by_auth_client = session.query(ClientTotal).filter(ClientTotal.client == auth_client_name).order_by(ClientTotal.id.desc()).all()
for rbac in result_by_auth_client:
print(rbac.id)
session.close()
В данном коде мы создаем сессию, задаем имя клиента для фильтрации, выбираем записи из таблицы ClientTotal
, фильтруем по имени клиента и сортируем результаты по полю id
в порядке убывания. После этого мы выводим идентификаторы всех найденных записей. Не забудьте закрыть сессию после завершения работы, чтобы избежать утечек ресурсов.
Дополняя ответ @Radu, стоит отметить, что в SQL вы можете указать имя таблицы в параметре, если у вас есть несколько таблиц с одинаковым атрибутом.
.order_by("TableName.name desc")
Как клонировать список, чтобы он не изменялся неожиданно после присваивания?
Сохранить график в файл изображения вместо его отображения
Преобразование списка словарей в DataFrame pandas
Как отсортировать список/кортеж списков/кортежей по элементу на заданном индексе
Как отменить последнюю миграцию?