mykey.get()方法在谷歌应用引擎项目中不起作用

时间:2013-11-23 00:00:09

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

我将我的一个项目传递给谷歌应用引擎,只是为了学习。但是我在使用ndb数据存储区时遇到了一些问题。我的根实体将是类别,并且这些实体具有子类别作为子实体。所以我要说我有类别 Foods ,它有子类别主菜。因此,此实体的关键是ndb.Key(Category, 'Foods', Subcategory, subcategoryId)。当我从这个键创建一个查询对象时,我可以获取正确的子类别,但是从文档中我想做其他两个方法,这些方法都不起作用,我不知道是什么原因。

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

当我从密钥生成safeUrl时,我无法使用ndb.Key(urlSafe=myUrlSafeString).get()返回对象,但是打印ndb.Key(urlSafe)会给我正确的密钥,因为它在 DataStore Viewer中声明

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

1 个答案:

答案 0 :(得分:3)

这里有一些问题。

首先Subcategory.get_by_id(subcategoryId)可能无效,因为示例键已定义了祖先。您需要在get_by_id

中包含祖先

鉴于您使用的是mySubcategorykey.get()且未检索到实体,则表示该密钥不正确。按键获取将不会经历最终的一致性,因此密钥是错误的,或者您没有放置()原始实体。

我建议您在放入()实体后查看密钥,看看它是否与您正在使用的实体相匹配。

你的示例键也存在问题,ndb.Key(Category, 'Foods', Subcategory, subcategoryId)类别和子类别需要是字符串,或字符串值为“类别”和“子类别”的变量 - 这样写起来有点奇怪

此外,您不能从键创建查询对象,query是ndb.Model的方法,或者您从ndb.Query实例化查询对象。

所以你混淆了一些终结和/或概念。