gpt4 book ai didi

sql - 在 Django 中,检查空查询集的最有效方法是什么?

转载 作者:行者123 更新时间:2023-12-03 01:39:44 25 4
gpt4 key购买 nike

我听到了使用以下内容的建议:

if qs.exists():
...

if qs.count():
...

try:
qs[0]
except IndexError:
...

复制下面的评论:“我正在寻找这样的语句:“在 MySQL 和 PostgreSQL 中,count() 对于短查询更快,exists() 对于长查询更快,并且在可能的情况下使用 QuerySet[0]您将需要第一个元素并且想要检查它是否存在。然而,当 count() 更快时,它只会稍微快一些,因此建议在两者之间进行选择时始终使用 contains() 。”

最佳答案

query.exists() 是最有效的方法。

特别是在 postgres 上,count() 可能非常昂贵,有时比普通的选择查询更昂贵。

exists() 运行没有 select_lated、字段选择或排序的查询,并且仅获取单个记录。这比通过表连接和排序来计算整个查询要快得多。

qs[0] 仍将包括 select_lated、字段选择和排序;所以会更贵。

Django 源代码在这里(django/db/models/sql/query.py RawQuery.has_results):

https://github.com/django/django/blob/60e52a047e55bc4cd5a93a8bd4d07baed27e9a22/django/db/models/sql/query.py#L499

def has_results(self, using):
q = self.clone()
if not q.distinct:
q.clear_select_clause()
q.clear_ordering(True)
q.set_limits(high=1)
compiler = q.get_compiler(using=using)
return compiler.has_results()

前几天困扰我的另一个问题是在 if 语句中调用 QuerySet。执行并返回整个查询!

如果变量 query_set 可能为 None (未设置函数参数),则使用:

if query_set is None:
#

不是:

if query_set:
# you just hit the database

关于sql - 在 Django 中,检查空查询集的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6868939/

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