Функция asc
Функция asc создает выражение для сортировки
результатов запроса по возрастанию. Первым
параметром функция принимает столбец или
выражение, по которому нужно отсортировать
данные. Обычно используется в методе order_by.
Синтаксис
asc(column)
Пример
Давайте создадим таблицу статей и отсортируем их по заголовку в порядке возрастания:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, asc
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 2},
{'title': 'article 1', 'text': 'text 1', 'status': 'published', 'num': 1},
{'title': 'article 3', 'text': 'text 3', 'status': 'draft', 'num': 3}
])
conn.commit()
stmt = select(articles.c.title).order_by(asc(articles.c.title))
res = conn.execute(stmt).scalars().all()
print(res)
Результат выполнения кода:
['article 1', 'article 2', 'article 3']
Пример
Давайте отсортируем статьи по полю num
по возрастанию и выведем заголовки:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, asc
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 3', 'text': 'text 3', 'status': 'draft', 'num': 30},
{'title': 'article 1', 'text': 'text 1', 'status': 'published', 'num': 10},
{'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 20}
])
conn.commit()
stmt = select(articles.c.title).order_by(asc(articles.c.num))
res = conn.execute(stmt).scalars().all()
print(res)
Результат выполнения кода:
['article 1', 'article 2', 'article 3']
Пример
Давайте используем asc вместе с
несколькими столбцами для сортировки:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, asc
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'text': 'text 1', 'status': 'draft', 'num': 2},
{'title': 'article 1', 'text': 'text 1', 'status': 'published', 'num': 1},
{'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 3}
])
conn.commit()
stmt = select(articles.c.title, articles.c.status).order_by(
asc(articles.c.title),
asc(articles.c.status)
)
res = conn.execute(stmt).all()
print(res)
Результат выполнения кода:
[('article 1', 'draft'), ('article 1', 'published'), ('article 2', 'draft')]
Смотрите также
-
функцию
desc,
которая сортирует результаты по убыванию -
функцию
nulls_first,
которая размещает NULL-значения в начале -
функцию
nulls_last,
которая размещает NULL-значения в конце -
функцию
label,
которая задает псевдоним для столбца