【问题标题】:Return SQLAlchemy results as dicts instead of lists将 SQLAlchemy 结果返回为 dicts 而不是列表
【发布时间】:2015-07-25 08:26:33
【问题描述】:

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

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)]

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

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

    return [dict(r) for r in results]
    

    【讨论】:

      【解决方案2】:

      结果看起来像元组/列表,但它们实际上是一个特殊的 Row 对象(KeyedTuple 用于 SQLAlchemy _asdict() 方法将每一行转换为字典。

      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}]
      

      【讨论】:

        猜你喜欢
        • 2014-05-19
        • 2018-03-24
        • 2019-12-09
        • 1970-01-01
        • 2013-07-22
        • 2014-01-11
        • 1970-01-01
        • 1970-01-01
        • 2020-12-10
        相关资源
        最近更新 更多