在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()
并返回一个可迭代的,但它每次都会访问实际的数据库,还是将其缓存,这意味着第二个for
循环将是更快的操作?
答案 0 :(得分:2)
结果不会被缓存,因为它们可能随时更改,并且没有实际的方法可以使包含修改结果的所有结果集无效。如果您只想执行示例代码中的步骤而不执行两次查询,只需在查询对象上调用.fetch()
以获取对象列表,然后迭代它而不是查询本身。
答案 1 :(得分:0)
不,他们没有。你必须自己做缓存。使用memcache或数据存储区周围的现成包装器之一为您执行此操作。