您不能对密钥进行过滤。哎呀,我错了。如果您设置了索引来处理它,则可以同时过滤键和其他属性。它看起来像这样:
key = db.Key.from_path('MyModel', 'keyname')
MyModel.all().filter("__key__ =", key).filter('foo = ', 'bar')
您还可以使用方法族通过键、键 ID 或键名称来查找多个模型get
。
# if you have the key already, or can construct it from its path
models = MyModel.get(Key.from_path(...), ...)
# if you have keys with names
models = MyModel.get_by_key_name('asdf', 'xyz', ...)
# if you have keys with IDs
models = MyModel.get_by_id(123, 456, ...)
您可以通过这种方式获取许多实体。我不知道确切的限制。如果任何键不存在,您将None
在该实体的列表中获得一个。
如果您需要过滤某些属性以及密钥,则必须分两步完成。通过键获取并检查属性,或查询属性并验证键。
这是获取后过滤的示例。请注意,您不使用 Query 类的filter
方法。相反,只需过滤列表。
models = MyModels.get_by_key_name('asdf', ...)
filtered = itertools.ifilter(lambda x: x.foo == 'bar', models)