0

这个问题非常关注 Lazy Django 对象,是他调用的查询缓存,我想了解它是如何根据 Django 工作的:

#1
data = Query.objects.all()
dato = data[5]

是相同的:

#2
dato = Query.objecs.all()[5]

问题是要了解 Django 缓存是否会导致视图中的对象 Lazy #1 等于 #2?或者如果不是在#1 将需要更长的时间来首先调用所有对象然后需要五个?

更多的是我不理解的理论问题 Django。

4

2 回答 2

1

在内部,可以构造、过滤、切片和传递 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
  1. 这两个查询的 SQL 脚本是相同的。
  2. 片段 #1 将比 #2 片段花费更多时间,因为它有两行要执行。
  3. 在这里,速度基于较少的 No.of.Lines execution

为了了解终端中的 Django 查询执行时间和原始 SQL 查询,请使用此命令python manage.py shell_plus --print-sql

于 2016-12-16T17:06:23.747 回答
0

根据我对 Python 解析方式的了解(不是很多),这两个示例必须做同样的事情。在解析第二个元素时,Python 将进行与第一个相同的调用Query.objects.all(),然后获取第六个元素。

于 2013-10-23T15:34:20.617 回答