google app引擎中的get_by_id python ndb以无响应响应

时间:2014-05-29 04:55:44

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

我在google app engine python ndb中使用get_by_id时遇到问题。

Python代码

尝试1

resource = Content.get_by_id(6093630880088064)

资源是None

尝试2

resource = Content.get_by_id(6093630880088064, parent = 5249205949956096)

BadValueError: Expected Key instance, got 5249205949956096L

尝试3

key_parent = ndb.Key('Subject', '5249205949956096')
resource = Content.get_by_id(6093630880088064, parent = key_parent)

资源是None

数据存储

Entity Kind       Content
Entity Key        ahBkZXZ-YnJhaW5ib290ZWNocigLEgdTdWJqZWN0GICAgICAxKkJDAsSB0NvbnRlbnQYgICAgIDE6QoM
ID                6093630880088064
Parent            ahBkZXZ-YnJhaW5ib290ZWNochQLEgdTdWJqZWN0GICAgICAxKkJDA
Subject:id=5249205949956096

任何建议都将不胜感激。我的目标是资源将是一个对象,我可以在其中执行resource.name之类的操作来检索名称属性。

3 个答案:

答案 0 :(得分:9)

将密钥作为字符串时会出现此问题,最简单的解决方案是:

Model.get_by_id(int(id))

最有可能出现的问题是当您从网址等处读取ID时:

class MyHandler(webapp2.RequestHandler):
    def get(self, id):
        instance = Model.get_by_id(int(id))

答案 1 :(得分:2)

解决了:)

key = int(key)
key_parent = ndb.Key(Subject, 5249205949956096)
resource = Content.get_by_id(key, parent = key_parent)

答案 2 :(得分:1)

尝试1: 您将获得None,因为此ID不存在任何实例。 ID是错误的,或者它是一个不是整数的字符串,就像你传递给函数一样。

尝试2: get_by_id实际上期望ID之前的父级(如果传递父级)。如果您想保留该订单,请使用

resource = Content.get_by_id(id = 6093630880088064, parent = parent_key)

更重要的是,父参数是父参数的关键而不是其ID。

尝试3: 在您的代码中,父代的ID作为字符串传递,内容的ID作为整数传递。我猜这个问题就在那里。你可以作为整数字符串传递。

希望有所帮助。