2024-09-22 16:38:21 发布
网友
我不是python专家,我很好奇django如何优化下面的查询
Model.objects.filter(field = 'abc')[0]
django会智能地将“limit 1”添加到SQL查询中,比如“select * from model where field = 'abc' limit 1”
limit 1
select * from model where field = 'abc' limit 1
这是因为Model.objects.filter(...)实际上并不返回列表,而是返回queryset object。当您执行qset[0]时,它调用querysets上的__getitem__方法,该方法添加limit 1并执行它。这里是the source of that method;当结果已经被缓存或没有缓存时,有各种情况的逻辑,以此类推。你知道吗
Model.objects.filter(...)
qset[0]
__getitem__
这是因为
Model.objects.filter(...)
实际上并不返回列表,而是返回queryset object。当您执行qset[0]
时,它调用querysets上的__getitem__
方法,该方法添加limit 1
并执行它。这里是the source of that method;当结果已经被缓存或没有缓存时,有各种情况的逻辑,以此类推。你知道吗相关问题 更多 >
编程相关推荐