这个问题非常关注 Lazy Django 对象,是他调用的查询缓存,我想了解它是如何根据 Django 工作的:
#1
data = Query.objects.all()
dato = data[5]
是相同的:
#2
dato = Query.objecs.all()[5]
问题是要了解 Django 缓存是否会导致视图中的对象 Lazy #1 等于 #2?或者如果不是在#1 将需要更长的时间来首先调用所有对象然后需要五个?
更多的是我不理解的理论问题 Django。
这个问题非常关注 Lazy Django 对象,是他调用的查询缓存,我想了解它是如何根据 Django 工作的:
#1
data = Query.objects.all()
dato = data[5]
是相同的:
#2
dato = Query.objecs.all()[5]
问题是要了解 Django 缓存是否会导致视图中的对象 Lazy #1 等于 #2?或者如果不是在#1 将需要更长的时间来首先调用所有对象然后需要五个?
更多的是我不理解的理论问题 Django。
在内部,可以构造、过滤、切片和传递 QuerySet,而无需实际访问数据库。在您执行某些操作来评估查询集之前,实际上不会发生任何数据库活动。
#1
data = User.objects.all()
dato = data[5]
#2
dato = User.objecs.all()[5]
#sql-script
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` LIMIT 1
OFFSET 5
为了了解终端中的 Django 查询执行时间和原始 SQL 查询,请使用此命令python manage.py shell_plus --print-sql
。
根据我对 Python 解析方式的了解(不是很多),这两个示例必须做同样的事情。在解析第二个元素时,Python 将进行与第一个相同的调用Query.objects.all()
,然后获取第六个元素。