我尝试使用提供的密钥ID字符串列表来查询NDB模型。该模型具有在创建时分配的字符串ID - 例如:
objectKey = MyModel(
id="123456ABC",
name="An Object"
).put()
现在我无法弄清楚如何使用列表过滤器查询NDB密钥ID。通常,您可以执行MyModel.property.IN()来查询属性:
names = ['An Object', 'Something else', 'etc']
# This query works
query = MyModel.query(MyModel.name.IN(names))
当我尝试按键列表进行过滤时,我无法让它工作:
# This simple get works
object = MyModel.get_by_id("123456ABC")
ids = ["123456ABC", "CBA654321", "etc"]
# These queries DON'T work
query = MyModel.query(MyModel.id.IN(ids))
query = MyModel.query(MyModel.key.id.IN(ids))
query = MyModel.query(MyModel.key.id().IN(ids))
query = MyModel.query(MyModel._properties['id'].IN(ids))
query = MyModel.query(getattr(MyModel, 'id').IN(ids))
...
我总是遇到AttributeError: type object 'MyModel' has no attribute 'id'
错误。
我需要能够按ID列表进行过滤,而不是遍历列表中的每个ID(有时很长)。我该怎么做?
答案 0 :(得分:7)
以下内容应该有效:
keys = [ndb.Key(MyModel, anid) for anid in ids]
objs = ndb.get_multi(keys)
答案 1 :(得分:0)
您还可以使用urlsafe密钥如果您在使用ID时遇到问题。
keys = ndb.get_multi([ndb.Key(urlsafe=k) for k in ids])