我想使用ndb.get_multi(list_of_keys)
来避免进行更昂贵的查询。如果我的理解是正确的,ndb.get_multi()
只收取每个实体返回1次读取的费用,因此如果您有50个密钥的列表,并且只找到20个密钥,那么您只需支付20次读取费用。
keys = list()
keys.append(Key('User', 2)) // this user exists
keys.append(Key('User', 12)) // this user DOES NOT exist
keys.append(Key('User', 15)) // this user DOES NOT exist
users = ndb.get_multi(keys)
我得到的是3个项目,1个用户,2个只有空值。当我检查AppStats时,我发现它确实向我收取了我放在那里的所有按键,即使2不存在。
为什么我要回到null实体?不应该跳过未找到的物品吗?
答案 0 :(得分:2)
您希望能够
obj1, obj2, obj3 = ndb.get_multi([key1, key2, key3])
如果返回的结果数是任意长度,则元组解包会中断,您必须获取列表并检查和比较键。如果您需要使用filter:
,也可以轻松删除filter(None, list)
每次获取/读取(操作)的成本,与每个返回的结果(数据)不同。 GAE中的内部服务和通信的成本大致相同,无论它是否存在,但您不必为不存在的项目反向支付cpu进行反序列化。
答案 1 :(得分:1)
不,因为现在你可以看到哪些物品没有找到。