如何进行投影查询并检索多个条目(来自给定的键列表)

时间:2013-12-10 05:08:33

标签: google-app-engine python-3.x google-cloud-datastore

这就是我所拥有的 - 为什么它不起作用? thing_keys是来自ThingsTable的数据存储区键列表。

q = db.Query(ThingsTable, projection=['name', 'duration', 'cost','next_start_date', 'rate_ave_overall'])

courses = q.get(thing_keys)

_______

当我使用时,工作是什么:     courses = ThingsTable.get(thing_keys)

出于性能原因,我想进行投影 - 只需要选择字段。这一定是可能的 - 任何想法??

2 个答案:

答案 0 :(得分:1)

查询get只返回一个条目,不接受键列表作为参数 https://developers.google.com/appengine/docs/python/datastore/queryclass#Query_get

对于投影查询,请确保您具有所需的索引。你是什​​么意思不起作用?你收到错误?没结果?

答案 1 :(得分:1)

听起来你想要做的是混合使用get和projection查询。使用数据存储区无法做到这一点。

在数据存储区中发出查询时,它使用索引查找满足该查询的实体的键列表,然后查找这些实体并返回它们。投影查询利用了索引由属性组成的事实,因此它可以避免执行第二次调用以实际获取实体。但是,当您已经拥有所需的键列表时,可以一起跳过索引,然后跳转到所需的实体。

通过直接获取,您实际上可以通过避免在索引上运行查询来获得更好的性能优势。如果您仍然担心获取整个实体的性能,则应考虑将实体拆分为大多数时间所需的属性,然后将其他属性拆分。

Here是关于如何存储实体的更多信息,如果您感兴趣的话。