ndb.get_multi()返回null实体

时间:2012-10-19 15:49:29

标签: python google-app-engine

我想使用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实体?不应该跳过未找到的物品吗?

2 个答案:

答案 0 :(得分:2)

您希望能够

obj1, obj2, obj3 = ndb.get_multi([key1, key2, key3])

如果返回的结果数是任意长度,则元组解包会中断,您必须获取列表并检查和比较键。如果您需要使用filter

,也可以轻松删除
filter(None, list)

每次获取/读取(操作)的成本,与每个返回的结果(数据)不同。 GAE中的内部服务和通信的成本大致相同,无论它是否存在,但您不必为不存在的项目反向支付cpu进行反序列化。

答案 1 :(得分:1)

不,因为现在你可以看到哪些物品没有找到。