【发布时间】:2015-03-08 12:17:47
【问题描述】:
当您对查询集执行某些操作(例如 len 或 slicing)时,您会点击 DB 并评估查询。
从values() or values_list() 返回的 ValuesQuerySet 是否已经评估?
即它是否已经击中 DB?
【问题讨论】:
当您对查询集执行某些操作(例如 len 或 slicing)时,您会点击 DB 并评估查询。
从values() or values_list() 返回的 ValuesQuerySet 是否已经评估?
即它是否已经击中 DB?
【问题讨论】:
不,ValuesQuerySet 未评估:
>>> from app.models import *
>>> from django.db import connection
>>> qs = Question.objects.all().values()
>>> len(connection.queries) # no db hit
0
>>> v = list(qs)
>>> len(connection.queries) # db hit
1
【讨论】:
len(connection.queries) 是否返回 DB 点击数?
connection.queries 包含在当前连接中执行的 SQL 查询列表。