Как выполнить группировку в SQLAlchemy?

Пользователь

от dorothea_stoltenberg , в категории: Python , 2 года назад

Как выполнить группировку в SQLAlchemy?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от edyth , год назад

@dorothea_stoltenberg 

Для выполнения группировки в SQLAlchemy необходимо использовать метод group_by() объекта Query. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
Base = declarative_base()

class Person(Base):
    __tablename__ = 'people'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

Base.metadata.create_all(engine)

session = Session()

people = session.query(Person.name, Person.age).group_by(Person.age).all()

for p in people:
    print(p.name, p.age)


В этом примере мы создаем таблицу people и заполняем ее несколькими записями. Затем мы используем метод group_by(Person.age) для группировки записей по столбцу age и выбираем только столбцы name и age. Полученные результаты мы выводим на экран.

Пользователь

от maya , 8 месяцев назад

@dorothea_stoltenberg 

Вот примерный код для выполнения группировки в SQLAlchemy:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
Base = declarative_base()

class Person(Base):
    __tablename__ = 'people'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

Base.metadata.create_all(engine)

session = Session()

# Группировка записей по возрасту и подсчет количества людей в каждой группе
from sqlalchemy import func
from sqlalchemy.orm import aliased

# Создаем псевдоним для таблицы Person
person_alias = aliased(Person)

grouped_people = session.query(Person.age, func.count(person_alias.id)).    join(person_alias, Person.age == person_alias.age).    group_by(Person.age).all()

for age, count in grouped_people:
    print("Возраст:", age, "Количество людей:", count)


Здесь мы используем функцию func.count() для подсчета количества записей в каждой группе. Метод join() используется для объединения таблицы Person с самой собой (в данном случае под псевдонимом person_alias) по столбцу age. Далее мы группируем записи по возрасту и выводим результаты на экран.