我在 django 中有一个名为“Sample”的模型,我想根据过滤器查询并返回大量行 ~ 100k。但是,返回响应最多需要 4-5 秒,我想知道是否可以让它更快。
(需要改进从查询集到 df 到响应 json 的转换。不从数据库查询)
我当前的代码如下所示:
@api_view(['POST'])
def retrieve_signal_asset_weight_ts_by_signal(request):
#code to get item.id here based on request
qs = Sample.objects.filter(
data_date__range=[start_date, end_date],
item__id = item.id).values(*columns_required)
df = pd.DataFrame(list(qs), columns=columns_required)
response = df .to_json(orient='records')
return Response(response, status=status.HTTP_200_OK)
基于多个测试用例——我注意到缓慢的部分实际上并不是从 DB 获取数据,而是将其转换为 DataFrame,然后以 JSON 的形式返回。这部分实际上需要大约 2 秒df = pd.DataFrame(list(qs), columns=columns_required)
。我正在寻找一种更快的方法将查询集转换为 json,我可以将其作为“响应”对象的一部分发送!
基于这个链接,我尝试了其他方法,包括django-pandas
和使用.values_list()
,但它们似乎比这慢,我注意到许多答案都很老,所以我想知道 Django 3 是否有任何东西可以让它更快。
谢谢
Django 版本:3.2.6