Model の直接のスーパークラスである _BaseQuery のソース コードから:
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.
フェッチは、取得するエンティティの数がよくわかっていて、参照プロパティをプリフェッチしたり、複数のエンティティを同時にプットしたりする可能性が高い場合に、おそらくより便利です。
フェッチも実行もせずに反復するだけの場合、デフォルトのバッチ サイズが最適ではない可能性があるため、ラウンド トリップが増えてレイテンシが増加します。
db ではなく ndb を使用することも検討する必要があることに注意してください。これにより、より簡単な非同期操作などの他のいくつかのオプションが得られます。さらに、query.map() と query.map_async() があります。