【问题标题】:get_by_id in google app engine python ndb responds with None谷歌应用引擎 python ndb 中的 get_by_id 响应为 None
【发布时间】:2014-05-29 04:55:44
【问题描述】:

我在谷歌应用引擎 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 之类的操作来检索名称属性。

【问题讨论】:

  • 如果项目有parent 键然后get_by_id 必须有parent 参数

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


【解决方案1】:

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

Model.get_by_id(int(id))

这个问题最有可能出现的就是从url等读取id的时候:

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

【讨论】:

    【解决方案2】:

    已解决:)

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

    【讨论】:

      【解决方案3】:

      尝试 1: 您得到 None 因为不存在具有此 ID 的实例。 ID 错误,或者它是一个字符串,而不是您传递给函数的整数。

      尝试 2: get_by_id 实际上在 ID 之前期望父级(如果父级被传递)。如果您想保持该顺序,请使用

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

      更重要的是,parent 参数是 parent 的 key 而不是它的 ID。

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

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 2015-05-15
        • 1970-01-01
        • 2012-10-02
        • 1970-01-01
        相关资源
        最近更新 更多