Query和GqlQuery操作是否自动缓存结果?

时间:2012-05-14 20:41:49

标签: google-app-engine caching

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

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循环将是更快的操作?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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