什么会更有效或更方便?
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...
答案 0 :(得分: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.
如果你很清楚你将获得多少实体,并且想要预取参考属性或同时进行多个实体的放置,那么获取可能会更有用。
如果您只是在没有获取或运行的情况下进行迭代,那么默认的批量大小可能不是最佳的,因此您将有更多的往返时间增加延迟。
请注意,您还应该考虑使用ndb而不是db,它会为您提供一些其他选项,例如更简单的异步操作,还有query.map()和query.map_async()。