0

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ループの方がはるかに高速な操作になります。

4

2 に答える 2

2

結果はいつでも変更される可能性があるためキャッシュされません。変更された結果を含む可能性のあるすべての結果セットを無効にする実際的な方法はありません。クエリを 2 回実行せずにサンプル コードの手順を実行するだけの場合.fetch()は、クエリ オブジェクトを呼び出してオブジェクトのリストを取得し、クエリ自体の代わりにそれを反復処理します。

于 2012-05-15T03:08:12.577 に答える