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

如何用Django执行原生MySQL查询统计记录数并在HTML模板展示?

问题分析与解决方案

你的代码存在几个关键错误,导致模板无法渲染出记录数:

错误点说明

  • fetchall是方法,必须加括号调用fetchall(),你直接写locate.fetchall是引用方法对象,不是执行查询,len()自然无法得到正确结果
  • 原生SQL的count(*)没有指定别名,Django的RawQuerySet需要将查询结果映射到模型字段,无别名的话无法正确解析这个统计值
  • 你写的mydb是数据库名,而非Record模型对应的实际表名,应该替换为模型关联的表名(比如app_record,或者用Record._meta.db_table动态获取)

修正方案

方案1:修正原生SQL查询

def number_of_rec(request):
    # 动态获取Record模型对应的表名,避免硬编码
    table_name = Record._meta.db_table
    # 给count结果指定别名count,让RawQuerySet能解析
    query_set = Record.objects.raw(f"SELECT count(*) as count FROM {table_name}")
    # 取第一个结果的count属性
    number_of_rec = query_set[0].count
    return render(request, 'test.html', {'number_of_rec': number_of_rec})

方案2:使用Django ORM(更推荐)

完全不用原生SQL,直接用ORM提供的count()方法,简洁又安全:

def number_of_rec(request):
    number_of_rec = Record.objects.count()
    return render(request, 'test.html', {'number_of_rec': number_of_rec})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:28:22