0

在 AppEngine 中执行查询时,您可以使用QueryorGqlQuery对象从数据存储区中获取数据。我想知道这些对象是否缓存了它们的结果集,或者它们是否每次都获取数据。例如,如果您需要多次循环结果:

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()并返回一个可迭代对象,但它是每次都访问实际数据库,还是缓存它,这意味着第二个for循环将是一个更快的操作?

4

2 回答 2

2

结果不会被缓存,因为它们可能随时更改,并且没有实用的方法来使所有可能包含修改结果的结果集无效。如果您只想执行示例代码中的步骤而不执行两次查询,只需调用.fetch()查询对象以获取对象列表,然后对其进行迭代而不是查询本身。

于 2012-05-15T03:08:12.577 回答
0

不,他们没有。您必须自己进行缓存。在为您执行此操作的数据存储周围使用 memcache 或现成的包装器之一。

于 2012-05-15T02:55:30.227 回答