问题非常集中在Lazy Django对象上,是他调用的查询缓存,我想了解Django的工作方式是:
#1
data = Query.objects.all()
dato = data[5]
与:
相同#2
dato = Query.objecs.all()[5]
问题是要了解Django缓存是否导致对象Lazy#1在视图中等于#2?或者如果相反,#1需要更长时间才能调用所有对象,然后再调用5个?
更像是一个我不理解的Django理论问题。
答案 0 :(得分: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
为了了解Django在终端中查询执行时间和原始SQL查询,请使用此命令python manage.py shell_plus --print-sql
。
答案 1 :(得分:0)
据我所知,如何解析Python(这不是很多),这两个例子必须做同样的事情。在解析第二个时,Python将对Query.objects.all()
进行与第一个相同的调用,然后采用第六个元素。