SQLAlchemy Core — мощный инструмент для выполнения SQL-запросов с использованием питоновского синтаксиса. Группировка и сортировка данных — ключевые операции при работе с базами данных, и сегодня мы разберёмся, как их реализовать с помощью SQLAlchemy.
Основное применение 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()
: упорядочивание результатов запроса по одному или нескольким столбцам.
Пример:
Допустим, мы хотим отсортировать наши продажи по количеству, начиная с самого высокого:
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. Главное помнить о базовых принципах группировки и сортировки, и вы сможете легко адаптировать их для своих потребностей.
Содержание: