AppEngineでクエリを実行する場合、Query
またはGqlQuery
オブジェクトを使用してデータストアからデータをフェッチできます。これらのオブジェクトが結果セットをキャッシュするのか、それとも毎回データをフェッチするのか疑問に思いました。たとえば、結果を複数回ループする必要がある場合:
query = GqlQuery('SELECT * '
'FROM User '
'WHERE favorite_color = :1',
'pink')
for user in query:
# perform setup ...
# do some intermediary step ...
for user in query:
# final step ...
ループでは、クエリオブジェクトは自動的に反復可能オブジェクトを呼び出し.run()
て返しますが、毎回実際のデータベースにアクセスするのでしょうか、それともキャッシュするのでしょうか。つまり、2番目のfor
ループの方がはるかに高速な操作になります。