我在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
之类的操作来检索名称属性。
答案 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作为整数传递。我猜这个问题就在那里。你可以作为整数字符串传递。
希望有所帮助。