You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SUM()函数报错:'dict object' has no attribute 'SUM'

问题解决:Jinja模板中访问SQL聚合字段报错'dict object' has no attribute 'SUM'

错误原因

你的SQL查询使用了SUM()聚合函数,但未给这些聚合结果指定别名,同时在Jinja模板里错误地用stock.SUM(shares)这种方式访问聚合字段——数据库返回的结果中,聚合字段的键名并非SUM(shares),且Jinja不支持这种带特殊符号的属性访问方式;另外模板里的{{ "stock.SUM(shares)" }}是直接输出字符串,并非访问变量。

解决方案

步骤1:修改SQL查询,为聚合字段添加别名

给SUM(shares)和SUM(total)指定清晰的别名,让返回的结果字典拥有明确可访问的键:

portfolio = db.execute("SELECT DISTINCT symbol, name, SUM(shares) AS total_shares, price, SUM(total) AS total_value FROM history GROUP BY name;")

步骤2:修正Jinja模板中的变量访问

把模板里错误的字段访问方式替换为对应的别名:

{% for stock in portfolio %}
    <tr>
        <td>{{ stock.symbol }}</td>
        <td>{{ stock.name }}</td>
        <td>{{ stock.total_shares }}</td>
        <td>{{ stock.price }}</td>
        <td>{{ stock.total_value }}</td>
    </tr>
{% endfor %}

补充说明

如果暂时不想修改SQL查询,也可以通过字典键的方式直接访问未别名的聚合字段(不推荐,可读性差):

<td>{{ stock['SUM(shares)'] }}</td>
<td>{{ stock['SUM(total)'] }}</td>

但这种方式容易出错,代码可读性低,优先推荐给聚合字段加别名的方案。

内容的提问来源于stack exchange,提问作者ryokans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:15:34