Django数据库查询结果集转换为JSON的正确方法

拾柒
拾柒
发布时间:2026-10-13 | 3人浏览过
原创

本文详解Django中将数据库查询结果集转换为JSON返回前端的两种方案。针对ORM查询,指出model_to_dict()仅适用于单条数据,多条数据需遍历集合后转换;针对原生SQL,演示如何通过cursor.description获取字段名并组装字典列表,同时处理时间类型格式化,确保返回数据符合前端JSON接收标准。

Django ORM查询结果转JSON的处理逻辑

在Django中执行SQL语句后,直接获取的结果集无法直接转换为JSON返回给前端,否则会导致报错。正确的做法是先将结果集遍历转换为字典列表,再序列化为JSON。需要特别注意,model_to_dict()函数仅能将结果集中的第一条数据转换为字典。如果查询条件是获取单条特定数据,直接使用model_to_dict()没有问题;但如果执行的是all()或filter()获取多条或全部数据,直接对该集合使用model_to_dict()会失败。此时,必须先遍历该集合,将每条数据转换为字典,最后再统一转换为JSON即可解决。

ORM查询示例代码


dic = {}
res = models.tables.objects.all().order_by('-id')
L = []
b = model_to_dict(res)
L.append(b)
dic['code'] = '1'
dic['message'] = ''
dic['result'] = L
return HttpResponse(json.dumps(dic, ensure_ascii=False))

查询结果的排序方法

order_by('-id'):该方法用于将查询结果集按照ID字段进行倒序排序。

原生SQL查询结果转JSON的实现

补充知识:Django执行SQL语句时,根据字段显示对应数据的具体实现方式。

原生SQL处理示例代码


L = []
cursor.execute(sql)
desc = cursor.description # 获取字段的描述,默认获取数据库字段名称
data_dict = [dict(zip([col[0] for col in desc], row)) for row in
       cursor.fetchall()] # 列表表达式把数据组装起来
for online_dict in data_dict:  # 判断如果时间类型要转出字符串,后期碰到什么类型不能转的在加
  for key in online_dict:
    if type(online_dict[key]) in (datetime, pymysql.TIMESTAMP, pymysql.DATE,
                   pymysql.TIME, YEAR):
      online_dict[key] = online_dict[key].strftime(
        "%Y-%m-%d %H:%M:%S")
    else:
      pass
  L.append(online_dict)
conn.commit()
cursor.close()
conn.close()
dic['code'] = '2'
dic['message'] = ''
dic['result'] = L
return HttpResponse(json.dumps(dic, ensure_ascii=False))

总结

以上关于Django执行数据库查询后将结果集转换为JSON的内容分享完毕,希望能对大家有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表