【发布时间】:2022-08-06 03:47:52
【问题描述】:
假设我有两个模型Book 和User,在Book 上有一个外键。在我的一个 API 端点中,我返回以下 QuerySet:
return User.objects.get(pk=user_id).posts.all()
结果在浏览器上正确呈现。如果我将行更改为(使用列表):
return list(User.objects.get(pk=user_id).posts.all())
输出结果是一样的。
由于 QuerySet 是延迟加载(仅在评估时执行),我的问题是:
两种方法在内存或性能方面有什么区别?还是 return 和 list 具有相同的效果(评估 QuerySet)?我应该使用什么最好的方法?
我阅读了文档,但我不太清楚返回 QuerySet 或它的列表时会发生什么。
额外信息:我正在使用基于 FastAPI 的 Ninja API,但对于 django 视图的上下文数据,问题是相同的。
提前致谢!
-
我的直觉是,在大多数情况下,性能几乎相同。您是否尝试对其进行基准测试?有任何明显的性能差异吗?
-
我尝试过使用这个(装饰器)进行基准测试[github.com/goutomroy/django_select_prefetch_related/blob/master/….一个额外的数据库命中是使用列表进行的。
-
如果总是使用 return,我认为性能不会有任何差异。基准测试是仅在返回查询集的方法上执行还是在该方法的用户上执行?
标签: python django orm django-queryset