sqlalchemy gruppierung nach x

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Ruffy
User
Beiträge: 34
Registriert: Dienstag 2. Oktober 2012, 11:26

Hi ich wollte mal fragen ob folgendes irgendwie möglich ist:

ich hab ne db die so aussieht:

id value
1 2
1 5
2 1
3 3
1 1

jetzt hätte ich gerne eine abfrage die die values innerhalb einer id zusammen fasst... änlich wie .group_by(id) was mir aber nur jeweils einen wert pro id ausgiebt...

ausgabe sollte am ende so aussehen:

Einträge für ID 1:
1, 2, 5

Einträge für ID 2:
1

Einträge für ID 3:
3

das einzigste was mir einfällt ist:
ein query mit group_by(id).count() zu machen und dann eine while schleife mit counter die die values für die jeweilige id ausliest...

Code: Alles auswählen

counter = 1
max_count = session.query(Database).group_by(id).count()
while max_count > counter:
    session.query(Database).filter(Database.id == counter).order_by(Database.value)
    counter = counter + 1
....
BlackJack

@Ruffy: Da das mit SQL AFAIK nicht möglich ist, dürfte es mit SQLAlchemy auch nicht möglich sein. Ich würde mir die Datensätze einfach nach ID sortiert geben lassen und die Gruppierung dann auf Python-Seite mit `itertools.groupby()` erledigen.

Edit: Also sowas in dieser Richtung:

Code: Alles auswählen

from itertools import groupby
from operator import attrgetter

# ...

records = session.query(Database).order_by(Database.id).all()
for id_, group in groupby(records, attrgetter('id')):
    print 'Einträge für ID', id_
    print ', '.join(record.value for record in group)
    print
Antworten