如何快速将Django QuerySet转换为JSON格式?
优化Django大量QuerySet转JSON的性能
你的问题核心在于手动遍历QuerySet并构造字典时,每个迭代都会创建完整的Users模型实例,这在7万条数据的规模下会产生巨大的性能开销。下面是几个直接有效的优化方案:
用
values()直接获取字典格式结果
这是最见效的优化,跳过模型实例化步骤,直接从数据库查询出字典结构的数据:queryset = Users.objects.values('id', 'name') return JsonResponse(list(queryset), safe=False)values()返回的是ValuesQuerySet,本质是字典的迭代器,转成列表后序列化的开销比手动构造字典小得多,能把序列化时间从几秒压缩到几百毫秒内。流式返回避免内存过载
如果7万条数据一次性加载到内存有压力,或者想让前端更快开始接收数据,可以用StreamingHttpResponse流式输出JSON:from django.http import StreamingHttpResponse import json def stream_users(): queryset = Users.objects.values('id', 'name').iterator() yield '[' first_item = True for item in queryset: if not first_item: yield ',' yield json.dumps(item) first_item = False yield ']' return StreamingHttpResponse(stream_users(), content_type='application/json')这种方式不需要把所有数据都加载到内存再序列化,边迭代边输出,既能节省服务器内存,也能提升前端的响应体验。
用更快的JSON序列化库
Python标准库的json序列化速度一般,换成C实现的ujson能进一步提升性能:
先安装依赖:pip install ujson
然后修改代码:import ujson from django.http import HttpResponse queryset = Users.objects.values('id', 'name') serialized_data = ujson.dumps(list(queryset)) return HttpResponse(serialized_data, content_type='application/json')ujson的序列化速度比标准库快2-5倍,适合处理大规模数据的序列化场景。
内容的提问来源于stack exchange,提问作者Beto
相关产品推荐
相关产品推荐

