Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么访问Django QuerySet变得非常慢?_Python_Django - Fatal编程技术网

Python 为什么访问Django QuerySet变得非常慢?

Python 为什么访问Django QuerySet变得非常慢?,python,django,Python,Django,我在Django中有一个模型查询: Query = Details.objects.filter(name__iexact=nameSelected) 我以后会过滤它: Query2 = Query .filter(title__iexact=title0) 然后,我使用以下方式访问它: ...Query2[0][0]... 几天前,它工作得很快。但现在它至少慢了20倍。 我在另一台电脑上测试,它工作得很快 更新:过滤不是延迟的原因,查询[0][0]是原因。 除此之外,它突然变得非常慢,而

我在Django中有一个模型查询:

Query = Details.objects.filter(name__iexact=nameSelected)
我以后会过滤它:

Query2 = Query .filter(title__iexact=title0)
然后,我使用以下方式访问它:

...Query2[0][0]...
几天前,它工作得很快。但现在它至少慢了20倍。 我在另一台电脑上测试,它工作得很快

更新:过滤不是延迟的原因,查询[0][0]是原因。 除此之外,它突然变得非常慢,而不是随着时间的推移


在我的第一台电脑上,什么会让它这么慢呢?

也许你可以在创建查询集时尝试从查询集中列出一个列表,这样你就有了一个真正的列表,而不仅仅是一个懒散的QS

Query2 = list(Query .filter(title__iexact=title0))

最好的方法是避免过滤查询的循环。我所做的是创建一个hashmap字典

dict0 = {}
然后,我在查询中添加了与该项对应的项和数据列表:

dict0 = dict(zip(title0List, DataList))

最后,我使用dict0而不是query,它将速度提高了至少10倍)

您的数据库是否变大了,还是两种情况下都是一样的?对名称的过滤将随着记录数的增加而线性增长(除非您有某种索引机制)。Queryset大小是一样的@Pax@WillemVan Onsem筛选不是延迟的原因,查询[0][0]是延迟的原因reason@Nessi:
QuerySet
s是惰性的,因此这意味着只有当您强制求值(例如使用
Query2[0]时,
Query2
才会在数据库上执行
它将在数据库中对其进行评估。因此
Query2
确实不能成为延迟的原因,因为它不会导致到db的往返。是的,这很聪明,我会尝试一下……不幸的是,我会告诉你同样的情况。这取决于db表,非常奇怪……是的,听起来非常奇怪!现在让我们看看你有什么解决方案。。。