gpt4 book ai didi

python - 什么时候评估 Django QuerySet?

转载 作者:行者123 更新时间:2023-12-05 01:03:04 27 4
gpt4 key购买 nike

我读过 django 查询集是懒惰的。但这是否意味着懒惰,因为我可以在一个语句上链接多个操作,或者懒惰,因为查询被延迟到需要结果的时候。例如,下面的模拟代码是执行两个还是三个 SQL 查询?

query = Books.objects.filter(pk=book_id)
if query.exists():
result = query.get()
else:
# ...

最佳答案

它实际上是“懒惰的,因为查询被延迟到需要结果的时候”。在您的代码片段中,第一行创建了一个未评估的查询集并且不会命中数据库。第二行肯定会触发 SQL 查询。第三行 - 如果执行 - 将再次访问数据库。

如果您设置了 settings.DEBUG=True,您可以自行检查 FWIW:

>>> from django.contrib.auth.models import *
>>> from django.db import connection
>>> connection.queries
[]
>>> query = User.objects.filter(pk=1)
>>> connection.queries
[]
>>> query.exists()
True
>>> connection.queries
[{u'time': u'0.000', u'sql': u'SELECT (1) AS `a` FROM `auth_user` WHERE `auth_user`.`id` = 1 LIMIT 1'}]
>>> query.get()
<User: root>
>>> connection.queries
[{u'time': u'0.000', u'sql': u'SELECT (1) AS `a` FROM `auth_user` WHERE `auth_user`.`id` = 1 LIMIT 1'},
{u'time': u'0.000', u'sql': u'SELECT `auth_user`.`id`, `auth_user`.`password`, `auth_user`.`last_login`, `auth_user`.`is_superuser`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`date_joined` FROM `auth_user` WHERE `auth_user`.`id` = 1 '}]
>>>

关于python - 什么时候评估 Django QuerySet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171736/

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