返回SQLAlchemy结果作为dicts而不是列表

Art*_*rti 9 python sqlalchemy

当我检查查询的结果时,它看起来像一个列表列表.我想返回一个dicts列表,将列名映射到结果值.如何将结果行转换为dicts?

results = db.session.query(
    PendingPost.campaign_id.label('campaign_id'),
    Campaign.title.label('title'),
    sqlalchemy.func.count(PendingPost.status).label('status_count'),
).join(
    Campaign, Campaign.id == PendingPost.campaign_id,
).join(
    Areas, Areas.id == PendingPost.area_id
).filter(
    sqlalchemy.func.month(PendingPost.creation_date) == datetime.datetime.utcnow().month
).group_by(
    PendingPost.status,
    PendingPost.campaign_id,
).all()

print(results)
[(3, 'campaign title', 1),
 (4, 'campaign title', 1)]
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 18

结果看起来像元组/列表,但它们实际上是一个特殊KeyedTuple对象.使用该_asdict()方法将每行转换为dict.

return [r._asdict() for r in results]
[{'campaign_id': 3, 'title': 'campaign title', 'status_count': 1},
 {'campaign_id': 4, 'title': 'campaign title', 'status_count': 1}]
Run Code Online (Sandbox Code Playgroud)


Leo*_*arr 11

在 Python 3.7 / SQLAlchemy 1.3.18 中,这对我有用:

return [dict(r) for r in results]
Run Code Online (Sandbox Code Playgroud)