2013-04-29 54 views

回答

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