Метод desc класса ColumnElement
Метод desc класса ColumnElement создает
выражение для сортировки результатов запроса по убыванию.
Метод не принимает параметров и возвращает объект
UnaryExpression, который можно передать в метод
order_by. Чаще всего метод применяется
к столбцам таблицы, например к Article.id
или Article.title.
Синтаксис
column.desc()
Пример
Давайте создадим модель Article и отсортируем
записи по идентификатору в порядке убывания:
from sqlalchemy import create_engine, select
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
text: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add_all([
Article(title='article 1', text='text 1'),
Article(title='article 2', text='text 2'),
Article(title='article 3', text='text 3'),
])
session.commit()
stmt = select(Article).order_by(Article.id.desc())
res = session.scalars(stmt).all()
for article in res:
print(article.id, article.title)
Результат выполнения кода:
3 article 3
2 article 2
1 article 1
Пример
Давайте отсортируем статьи по заголовку в порядке убывания:
from sqlalchemy import create_engine, select
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add_all([
Article(title='article 1'),
Article(title='article 3'),
Article(title='article 2'),
])
session.commit()
stmt = select(Article.title).order_by(Article.title.desc())
res = session.scalars(stmt).all()
print(res)
Результат выполнения кода:
['article 3', 'article 2', 'article 1']
Пример
Давайте посмотрим итоговый SQL-запрос, который
генерирует метод desc:
from sqlalchemy import create_engine, select
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
stmt = select(Article).order_by(Article.id.desc())
print(stmt)
Итоговый SQL запрос:
SELECT articles.id, articles.title
FROM articles
ORDER BY articles.id DESC
Смотрите также
-
метод
asc,
который сортирует результаты по возрастанию -
метод
nulls_first,
который помещает NULL-значения в начало сортировки -
метод
nulls_last,
который помещает NULL-значения в конец сортировки -
класс
ColumnElement,
который представляет элемент столбца в выражениях