python - ndb.get_multi() 返回空实体

标签 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 时,我发现它确实向我收取了我放入其中的所有 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/

相关文章:

python - 在python中以不同的名称导入模块两次

javascript - CryptoJS 和 Pycrypto 协同工作

python - 在谷歌云数据存储上每次插入/删除后是否有回调?

java - GAE : About the "api" property in target "enhance_war"

python - 为序列 InvalidArgument 构建/训练 1D CNN

python - 当Django模型中设置blank=True时,如何区分需要null=True的字段?

python - Django haystack LocationField 在 elasticsearch 中创建为字符串而不是 geo_point

python - 实体组、ReferenceProperty 或键作为字符串

java - 使用 GAE/Arquillian 运行 Servlet 测试时出错

python - 使用 Python 解析 JSON 数据