如何用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
相关产品推荐
相关产品推荐

