我想使用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 时,我发现它确实向我收取了我放入其中的所有 key 的费用,即使 2 个 key 不存在。
为什么我会返回空实体?难道不应该跳过未找到的项目吗?
最佳答案
你希望能够做到
obj1, obj2, obj3 = ndb.get_multi([key1, key2, key3])
如果返回的结果数量是任意长度,则元组解包会中断,您必须获取列表并检查和比较键。如果您需要的话,使用 filter 删除 None 也很简单。 :
filter(None, list)
成本是每次获取/读取(操作)的成本,与每个返回结果(数据)的成本不同。 GAE 中的内部服务和通信的成本无论是否存在都大致相同,但对于不存在的项,您无需为反序列化支付 cpu 费用。
关于python - ndb.get_multi() 返回空实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977899/