【问题标题】:mykey.get() method doesn't work in google app engine projectmykey.get() 方法在谷歌应用引擎项目中不起作用
【发布时间】:2013-11-23 08:26:46
【问题描述】:

我将我的一个项目传递给谷歌应用引擎,只是为了学习。但是我对 ndb 数据存储有一些问题。我的根实体将是类别,这些具有子类别作为子实体。因此,假设我的类别 Foods 包含子类别 Main Dishes。所以这个实体的键是ndb.Key(Category, 'Foods', Subcategory, subcategoryId)。当我从这个键创建 query object 时,我可以 fetch 正确的子类别,但是从文档中我也想做其他两种不起作用的方法,不知道是什么原因。

mySubcategorykey.get() => 它使用上述键返回 None 。 Subcategory.get_by_id(subcategoryId) => 也返回无。

此外,当我从密钥生成 safeUrl 时,我无法返回带有 ndb.Key(urlSafe=myUrlSafeString).get() 的对象,但是打印 ndb.Key(urlSafe) 会给我正确的密钥,正如 DataStore Viewer 中所述.

任何人都可以帮助我,请告诉我我做错了什么?谢谢。

【问题讨论】:

    标签: google-app-engine python-2.7 app-engine-ndb


    【解决方案1】:

    这里有些地方不对。

    首先Subcategory.get_by_id(subcategoryId) 可能不起作用,因为您的示例键定义了祖先。您需要在 get_by_id 中包含祖先

    假设您使用的是 mySubcategorykey.get() 并且您没有检索实体,则这意味着密钥不正确。按键获取不会经历最终的一致性,因此密钥是错误的,或者您没有 put() 原始实体。

    我建议你在 put() 实体之后检查密钥,看看它是否真的与你正在使用的匹配。

    您的示例键也存在问题,ndb.Key(Category, 'Foods', Subcategory, subcategoryId) Category 和 Subcategory 必须是字符串,或者字符串值为“Category”和“SubCategory”的变量 - 这样写会有点奇怪。

    另外你不从键创建查询对象,query 是 ndb.Model 的一个方法,或者你从 ndb.Query 实例化一个查询对象。

    所以你混淆了一些术语和/或概念。

    【讨论】:

    • 关于您的回答。第一:它在文档中的哪里写,如果实体有一个祖先,它需要出现在 id 中才能使 get_by_id 工作? (我找不到那部分)。第二:正如我所写的,get() 不起作用,但是当我执行 Subcategory.query(ancestor=x),然后 fetch(y) 时,它起作用了,我取回了子类别。 ndb.Key 不一定是字符串:Entities and Keys
    • 它在实体和键的介绍中已经说了很多。如果密钥是使用祖先创建的,则必须将其提供给get_by_id,请参阅调用get_by_id(id, parent=None, app=None, namespace=None, **ctx_options) 的文档,否则可能无法获取它,因为您没有匹配的密钥。是的,关键组件也可以是整数。您在示例中的内容没有意义。正如我在答案中所说,通过查询获取其中一个实体,检查它的关键。键必须匹配 get() 才能工作。
    • 谢谢蒂姆!原来问题是你说的关键。
    猜你喜欢
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多