Django python在模型queryset上使用的切片sytax是否在数据库级别执行?

Django python在模型queryset上使用的切片sytax是否在数据库级别执行?,django,django-models,Django,Django Models,型号: 如果我使用 persons = person.objects.order_by('name')[0:25] 在代码中,在数据库级别执行的切片是转换为从人名顺序限制25选择*还是在代码级别执行?是的,切片转换为SQL限制。是的,切片转换为SQL限制。我认为这取决于执行的时间 Django的ORM查询集是懒惰的,因为它们在被迭代之前不会真正运行。这使您可以执行以下操作: persons = person.objects.filter(age__gte=25) persons = perso

型号:

如果我使用

persons = person.objects.order_by('name')[0:25]

在代码中,在数据库级别执行的切片是转换为从人名顺序限制25选择*还是在代码级别执行?

是的,切片转换为SQL限制。

是的,切片转换为SQL限制。

我认为这取决于执行的时间

Django的ORM查询集是懒惰的,因为它们在被迭代之前不会真正运行。这使您可以执行以下操作:

persons = person.objects.filter(age__gte=25)
persons = persons.filter(age__lte=50)
persons = persons.exclude(age=30)
persons = persons.order_by('name')
persons = persons[:25]
for person in persons:
    print person.name
也就是说,所有25岁以上、50岁以下的人(不包括30岁的人)都可以按姓名排序,然后给我前25张唱片

因为QuerySet是惰性的,所以当您实际进入for循环时,所有这些代码只创建一个数据库调用

所以,是的,从技术上讲,order_by在ORM进入循环时转化为一个极限

然而,ORM在幕后所做的是创建数据库返回的每条记录的Python列表。那么,假设我们在上述步骤之后继续:

for person in persons: # SQL command is compiled and run, with a list returned
    print person.name
persons = persons[:10] # Django just slices the list we already have in memory.

它可能看起来很琐碎,或者只是一个边缘案例,但了解幕后发生的事情很重要。

我认为这取决于它的执行时间

Django的ORM查询集是懒惰的,因为它们在被迭代之前不会真正运行。这使您可以执行以下操作:

persons = person.objects.filter(age__gte=25)
persons = persons.filter(age__lte=50)
persons = persons.exclude(age=30)
persons = persons.order_by('name')
persons = persons[:25]
for person in persons:
    print person.name
也就是说,所有25岁以上、50岁以下的人(不包括30岁的人)都可以按姓名排序,然后给我前25张唱片

因为QuerySet是惰性的,所以当您实际进入for循环时,所有这些代码只创建一个数据库调用

所以,是的,从技术上讲,order_by在ORM进入循环时转化为一个极限

然而,ORM在幕后所做的是创建数据库返回的每条记录的Python列表。那么,假设我们在上述步骤之后继续:

for person in persons: # SQL command is compiled and run, with a list returned
    print person.name
persons = persons[:10] # Django just slices the list we already have in memory.
这可能看起来很琐碎,或者只是一个边缘案例,但了解幕后发生的事情很重要。

这一点非常清楚,答案是肯定的,是肯定的:

使用Python数组切片语法的子集将查询集限制为一定数量的结果。这相当于SQL的LIMIT和OFFSET子句

这一点非常清楚,答案是肯定的:

使用Python数组切片语法的子集将查询集限制为一定数量的结果。这相当于SQL的LIMIT和OFFSET子句


旁注,不要做[0:25]。[:25]是完全相同的东西,但更多的蟒蛇和保存字符。这对某些人来说很重要。请注意,不要这样做[0:25]。[:25]是完全相同的东西,但更多的蟒蛇和保存字符。这对一些人来说很重要。