我想在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更差?
答案 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))
更新:是的,缓存仅在您按键接收实体时使用,在查询实体时 。