Группировка и сортировка данных в SQLAlchemy Core

Группировка и сортировка данных в SQLAlchemy Core

SQLAlchemy Core — мощный инструмент для выполнения SQL-запросов с использованием питоновского синтаксиса. Группировка и сортировка данных — ключевые операции при работе с базами данных, и сегодня мы разберёмся, как их реализовать с помощью SQLAlchemy.

Группировка данных с использованием group_by()

Основное применение group_by(): когда вы хотите агрегировать данные по одному или нескольким столбцам.

Пример:

Предположим, у нас есть таблица sales, где сохранены данные о продажах товаров:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String

metadata = MetaData()

sales = Table('sales', metadata,
              Column('id', Integer, primary_key=True),
              Column('product', String),
              Column('quantity', Integer)
              )

engine = create_engine('sqlite:///sales.db')

Теперь, если мы хотим узнать, сколько единиц каждого товара было продано, мы можем группировать данные по продукту:

from sqlalchemy import select, func

s = select([sales.c.product, func.sum(sales.c.quantity).label('total_quantity')]).group_by(sales.c.product)

Тут мы используем функцию func.sum(), чтобы посчитать общее количество каждого товара, и label(), чтобы дать понятное имя результату агрегации.

Сортировка данных с использованием order_by()

Основное применение order_by(): упорядочивание результатов запроса по одному или нескольким столбцам.

Пример:

Допустим, мы хотим отсортировать наши продажи по количеству, начиная с самого высокого:

s = select([sales.c.product, sales.c.quantity]).order_by(sales.c.quantity.desc())

Метод desc() используется для сортировки в обратном порядке. Без него результаты будут отсортированы по возрастанию.

Группировка и сортировка вместе

Эти две операции можно комбинировать в одном запросе:

s = (select([sales.c.product, func.sum(sales.c.quantity).label('total_quantity')])
     .group_by(sales.c.product)
     .order_by(func.sum(sales.c.quantity).desc()))

Здесь мы группируем продажи по продукту, вычисляем общее количество для каждого продукта и затем сортируем результаты по убыванию общего количества.

Вывод результатов

Чтобы выполнить запрос и получить результаты, выполните:

result = engine.connect().execute(s)
for row in result:
    print(row)

Заключение

С помощью SQLAlchemy Core выполнение таких запросов становится интуитивно понятным даже для тех, кто не знаком с SQL. Главное помнить о базовых принципах группировки и сортировки, и вы сможете легко адаптировать их для своих потребностей.

Содержание: