gpt4 book ai didi

python - Python 的 if 条件表达式中的大 django 查询集

转载 作者:太空宇宙 更新时间:2023-11-03 15:32:01 27 4
gpt4 key购买 nike

我有一个在下面的代码中使用的查询集。

result = 1 if queryset else 0

在小查询集的情况下没关系,但是当查询集变大(超过 500 000 个结果)时程序卡住,需要一些时间才能停止。

在上面的代码中测试 Django 的查询集时,幕后发生了什么?在那次检查期间是否执行了一些额外的工作?

即使查询集很大,调用 count()iterator() 或任何其他方法都没有问题,问题出在条件表达式上出现。

编辑:
查询集太大。它填充查询集的 self._result_cachelen() 会发生同样的事情,并在 for 循环中迭代查询集。

最佳答案

Python 将使用 __bool____len__ 方法来 test the truth value一个对象,它看起来像 Queryset 类的实现获取所有记录:

https://github.com/django/django/blob/master/django/db/models/query.py#L279

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

如果您需要,使用 if queryset.count()if queryset.exists() 可能是更好的主意。

关于python - Python 的 if 条件表达式中的大 django 查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57503778/

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