根据Model
类的the documentation,我可以使用.get()
类函数通过其键从AppEngine数据存储中检索一个或多个实体(Key
或string
)。我有一个模型Entry
:
class Model(ndb.Model):
def to_dict(self):
ret = ndb.Model.to_dict(self)
ret['key'] = self.key.urlsafe()
return ret
class Entry(Model):
text = ndb.StringProperty(required=True)
...
您会注意到我自动将实体的密钥添加到我的公共模型子类的.to_dict()
结果中,以便当它们被序列化为客户端的JSON时,然后通过客户端AJAX调用发送回服务器,我可以在数据存储区中找到相应的实体(非常简单,对吧?)。问题是,我现在正尝试通过以下方式从客户端使用序列化密钥在Python中获取这些实体:
entries = Entry.get(entryKeys)
...但我收到了以下错误:
type object 'Entry' has no attribute 'get'
Traceback (most recent call last):
...
File "/home/cbehar/dev/dada/handlers.py", line 126, in post
entries = Entry.get(entryKeys)
AttributeError: type object 'Entry' has no attribute 'get'
文档是否过时或者我只是在做一些愚蠢的事情?
我觉得这应该非常简单。我可以使用db.get()
代替,但Model.get()
应该有额外的类型检查,此时,我真的只是想知道我到底做错了什么。
答案 0 :(得分:1)
看起来我实际上在查看旧数据库数据存储区的文档,而不是新的NDB数据存储区。
google.appengine.ext.db | ndb.model
-----------------------------------------------------------------------
MyModel.get_by_key_name('my_key') | MyModel.get_by_id('my_key')
MyModel.get_by_id(42) | MyModel.get_by_id(42)
db.get(key) | key.get()
MyModel.get(key) | key.get()
db.get(model_instance) | model_instance.key.get()
db.get(list_of_keys) | ndb.get_multi(list_of_keys)
db.get(list_of_instances) | ndb.get_multi([x.key for x in
| list_of_instances])
MyModel.get_or_insert('my_key', | MyModel.get_or_insert('my_key',
parent=model_instance, | parent=model_instance.key,
foo='bar') | foo='bar')
所以看起来答案是这样的:
ndb.get_multi(ndb.Key(entryKey) for entryKey in entryKeys)
答案 1 :(得分:-1)
要通过密钥ID检索实体,您需要使用此方法调用对象:
ObjectName.get_by_id(int(your key)))
这是关于它的完整示例:
class KeyValueStore(ndb.Model):
key_name = ndb.StringProperty(required=True);
value = ndb.JsonProperty(required=True)
last_record = ndb.DateTimeProperty(auto_now=True)
def getDict(self):
master = self.to_dict()
master["key"] = self.key.id()
return master
@classmethod
def getByKey(cls, key=None):
if key != "" and key != None:
record = KeyValueStore.get_by_id(int(key))
if record:
json = record[0].value
return json
else:
return {}
else:
return {}