我试图获取以下查询结果的长度:
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()
并返回实体数。
答案 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])
如上所述 - 使用数据库的计数功能通常比加载所有记录并迭代它们更好/更快/更便宜。可能有理由不能使用 - 在这种情况下,这两个选项都可用。