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]是完全相同的东西,但更多的蟒蛇和保存字符。这对一些人来说很重要。