_QueryIterator的长度

时间:2014-04-15 01:09:16

标签: python google-app-engine webapp2 gql

我试图获取以下查询结果的长度:

matchingTitles = db.GqlQuery("SELECT * FROM Post WHERE title=:1",title).run()

我试过这样做:

if(len(matchingTitles)>0):

但是我收到以下错误:

TypeError: object of type '_QueryIterator' has no len()

我一直在搜索_QueryIterator对象文档,但似乎找不到任何文档。我只是迭代它并增加一个数字"对于每个"集合中的项目。想知道是否有更好的方法...

谢谢!

修改

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

matchingTitles = db.GqlQuery("SELECT * FROM Post WHERE title=:1",title).count()

并返回实体数。

2 个答案:

答案 0 :(得分:0)

这可能需要大量内存,但您可以使用itertools.tee: https://docs.python.org/2/library/itertools.html#itertools.tee

答案 1 :(得分:0)

对于遇到此问题的任何人实际上都在寻找_QueryIterator的长度,您可以尝试:

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

如上所述 - 使用数据库的计数功能通常比加载所有记录并迭代它们更好/更快/更便宜。可能有理由不能使用 - 在这种情况下,这两个选项都可用。