来自 _BaseQuery 的源代码,它是 Model 的直接超类:
def run(self, **kwargs):
"""Iterator for this query.
If you know the number of results you need, use run(limit=...) instead,
or use a GQL query with a LIMIT clause. It's more efficient. If you want
all results use run(batch_size=<large number>).
def fetch(self, limit, offset=0, **kwargs):
"""Return a list of items selected using SQL-like limit and offset.
Always use run(limit=...) instead of fetch() when iterating over a query.
如果您很清楚将获得多少个实体,并且您可能想要预取引用属性或同时放置多个实体,那么 Fetch 可能会更有用。
如果您只是在没有 fetch 或 run 的情况下进行迭代,那么默认批量大小可能不是最佳的,因此您将有更多的往返行程增加延迟。
请注意,您还应该考虑使用 ndb 而不是 db,它为您提供了一些其他选项,例如更简单的异步操作,此外它还有 query.map() 和 query.map_async()。