在App Engine中,query fetch()和迭代是否实质相同?

4 投票
1 回答
636 浏览
提问于 2025-04-16 09:59

在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)。

撰写回答