gpt4 book ai didi

python - 为什么在 bool 上下文中评估 Django QuerySet 比调用 `exists` 慢?

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:12 26 4
gpt4 key购买 nike

所以 Django docs说明如下:

And to find whether a queryset contains any items:

if some_queryset.exists():
print("There is at least one object in some_queryset")

Which will be faster than:

if some_queryset:
print("There is at least one object in some_queryset")

为什么会这样?有什么好理由?通常在 bool 上下文中评估 QuerySet 时,用户只关心是否至少有一项可能是 exists 更快的原因。为什么 __bool__QuerySet 上不能简单地完成与 exists 相同的工作量?

看源码,好像有一点功夫:

def __bool__(self):
self._fetch_all()
return bool(self._result_cache)

但没有文档提供有关原因的上下文。

对我来说,简单地调用 if some_queryset: 更简洁,更符合 Pythonic。

最佳答案

bool 当您想在稍后的时间访问查询集中的数据时会很有用。将在 if some_queryset: 中执行的 SQL 查询类型为

SELECT #column_names# FROM #table_name# ...

以及一些其他条件,具体取决于您的查询集。

虽然将在 if some_queryset.exists(): 中执行的 SQL 查询格式为

SELECT (1) FROM #table_name# ... LIMIT 1

在此 SELECT (1) ... 中,为表中的每一行返回一列 1,并且 LIMIT 会将查找限制为仅一个条目。

查询的这种变化主要有两个好处:

  1. 查询执行时间更短
  2. 通过网络传输的数据非常少

关于python - 为什么在 bool 上下文中评估 Django QuerySet 比调用 `exists` 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48788748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com