在App Engine中,query fetch()和迭代是否实质相同?
在App Engine 1.3.6版本中,于2010年8月17日发布,之前限制的1000个项目的fetch()
限制被取消了。
这是不是意味着ModelClass.all().fetch(limit=99999999999)
和[e for e in ModelClass.all()]
是一样的呢?
如果它们不一样,可能在某些细节上会有区别。例如,RPC调用的数量是否相同?
1 个回答
4
虽然从fetch中去掉了1000个实体的限制,但你还是需要自己设定一个上限。当然,如果你把这个上限设得足够大,就能把所有的实体都取回来。
你上面提到的迭代器方法在功能上是等价的(前提是传给fetch的上限足够大,可以取回所有实体)。不过,它们在性能上是有区别的。特别是,迭代器一次只会取一小部分实体。如果你的实体数量很大,使用迭代器的方法会发起更多的远程调用(RPC)。