@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
. Полученные результаты мы выводим на экран.
@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
. Далее мы группируем записи по возрасту и выводим результаты на экран.