0

什么会更有效或更方便?

1.- fetch()然后迭代:

query = MyEntity.all()
list = query.run()
for x in list:
    # do something...

2.- run()然后迭代:

query = MyEntity.all()
list = query.run()
for x in list:
    # do something...

3.- 直接遍历查询:

query = MyEntity.all()
for x in query:
    # do something...
4

1 回答 1

2

来自 _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()。

于 2013-04-29T10:04:48.813 回答