Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQLalchemy query get aggregate array of dicts

Is it possible to get an aggregate array containing dictionaries from an SQLAlchemy query? e.g.

session.query(
    Object.name,
    func.array_agg({Location.id: Location.name}).label('locations')
)\
    .join(Location)\
    .all()

So the expected result will be:

[
 ('Horizontal neutral circuit',
  [{143:'A5'},{145:'A8'},{765:'B12'}]),
 ('Fletcher, Lopez and Edwards',
  [{41:'A1'},{76:'B8'},{765:'B12'}]),
]
like image 939
Joost Döbken Avatar asked Nov 09 '17 13:11

Joost Döbken


1 Answers

I guess you could use json_build_object() to build your dictionaries:

from sqlalchemy.dialects import postgresql

session.query(
        Object.name,
        postgresql.array_agg(
            func.json_build_object(Location.id,
                                   Location.name)).label('locations'))\
    .join(Location)\
    .group_by(Object.name)\
    .all()

with the caveat that the keys will be strings, compared to your example's integer keys.

like image 142
Ilja Everilä Avatar answered Nov 14 '22 23:11

Ilja Everilä