查询给定的键

时间:2014-12-26 21:46:45

标签: google-app-engine

我想在ndb.get_multi()Query()之间完成某种混合解决方案。

我有一组钥匙,我可以使用:

entities = ndb.get_multi(keys)

我想使用Query()查询,过滤和排序这些实体,或者比手动在Python代码中完成所有操作更有效。

人们如何做到这一点?我想要这样的东西:

query = Entity.gql('WHERE __key__ in :1 AND prop1 = :2 ORDER BY prop2', keys, 'hello')
entities = query.fetch()

编辑:

上面的代码工作得很好,但似乎fetch()从不使用缓存中的值,而ndb.get_multi()就是这样。我对此是否正确?如果没有,gql + fetch方法是否比get_multi + manual processing更差?

1 个答案:

答案 0 :(得分:1)

除非您自己编写,否则无法对已经获取的属性使用查询,但所有这些内容都可以通过内置的python过滤器轻松完成。请注意,如果您拥有大型数据集,则运行查询的效率更高,而不是get_multi数百个密钥才能获得5个实体。

entities = ndb.get_multi(keys)
# filtering
entities = [e for e in entities if e.prop1 == 'bla' and e.prop2 > 3]
#sorting by multiple properties
entities = sorted(entities, key=lambda x: (x.prop1, x.prop2))

更新:是的,缓存仅在您按键接收实体时使用,在查询实体时