Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.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 查询迭代器的长度_Python_Google App Engine_Webapp2_Gql - Fatal编程技术网

Python 查询迭代器的长度

Python 查询迭代器的长度,python,google-app-engine,webapp2,gql,Python,Google App Engine,Webapp2,Gql,我正在尝试获取以下查询结果的长度: matchingTitles=db.gqlQuerySelectfromPost,其中title=:1,title.run 我试着这样做: iflenmatchingTitles>0: 但我得到了以下错误: TypeError: object of type '_QueryIterator' has no len() 我一直在到处寻找_QueryIteratorobject文档,但似乎找不到任何文档。相反,我只是对它进行迭代,并为集合中的每个项目增加一个数字

我正在尝试获取以下查询结果的长度:

matchingTitles=db.gqlQuerySelectfromPost,其中title=:1,title.run

我试着这样做:

iflenmatchingTitles>0:

但我得到了以下错误:

TypeError: object of type '_QueryIterator' has no len()
我一直在到处寻找_QueryIteratorobject文档,但似乎找不到任何文档。相反,我只是对它进行迭代,并为集合中的每个项目增加一个数字。想知道是否有更好的方法

谢谢

编辑

有一个更好的方法可以做到这一点。您可以简单地执行以下操作,而不是运行然后计数:

matchingTitles=db.gqlQuerySelectfromPost,其中title=:1,title.count


并返回实体数。

这可能需要大量内存,但您可以使用itertools.tee:

如果有人遇到这个问题,实际上是在寻找查询迭代器的长度,您可以尝试:

len(list(matchingTitles)) # This will load all the results into memory before counting.
# OR
sum([1 for _ in matchingTitles])

正如前面提到的,使用数据库的计数功能通常比加载所有记录并对其进行迭代更好/更快/更便宜。您不能使用该选项可能有原因,在这种情况下,这两个选项都可用。

您是否尝试过匹配titles.count?不熟悉Google Query,但是如果这个对象实际上是一个真正的迭代器,而不仅仅是一个花哨的名字,那么你将无法通过设计来找出它的长度。@Lawrence,不幸的是count不是一个属性。然后正如我所说的,在你遍历迭代器之前,你无法得到迭代器的长度。