我看过Django的查询集是惰性的。但这是否意味着可以在一个语句中链接多个操作,还是指查询被延迟到需要结果时才执行?例如,下面的模拟代码会执行两个还是三个SQL查询?
query = Books.objects.filter(pk=book_id)
if query.exists():
result = query.get()
else:
# ...
我看过Django的查询集是惰性的。但这是否意味着可以在一个语句中链接多个操作,还是指查询被延迟到需要结果时才执行?例如,下面的模拟代码会执行两个还是三个SQL查询?
query = Books.objects.filter(pk=book_id)
if query.exists():
result = query.get()
else:
# ...
settings.DEBUG=True
来自行验证。>>> 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 '}]
>>>