NDB:如何将get_by_id用于实体组中的实体

Arn*_*e S 4 python google-app-engine app-engine-ndb

我正在使用get_by_id()来读取NDB中的实体,我不认为它适用于属于实体组的实体:

from google.appengine.ext import ndb

class Folder(ndb.Model):
    name = ndb.StringProperty()

parent_folder_key = Folder(name = 'Parent folder').put()    
sub_folder_key = Folder(name = 'Subfolder', parent=parent_folder_key).put() 

id_list = []
print 'All folders:'
for f in Folder.query():
  print f
  id_list.append(f.key.id())

print '\nFolders by id:'
for id in id_list:
  print Folder.get_by_id(id)
Run Code Online (Sandbox Code Playgroud)

输出:

All folders:
Folder(key=Key('Folder', 5814), name=u'Parent folder')
Folder(key=Key('Folder', 5814, 'Folder', 5815), name=u'Subfolder')

Folders by id:
Folder(key=Key('Folder', 5814), name=u'Parent folder')
None
Run Code Online (Sandbox Code Playgroud)

是设计还是错误?我之前看到使用名称空间时出现了与get_by_id()有关的一些问题(我使用的是SDK 1.6.6).我如何拥有来自id的父母的文件夹?

asc*_*d00 7

get_by_id(id, parent=None)采用父参数.
当您通过实体组中的id进行查询时,您必须包含父键才能获得所需的实体.

https://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_by_id

  • 相信我,当有父母时,ID不是唯一的.密钥中的所有信息都是唯一标识实体所必需的.从层次上讲,这归结为:app; 命名空间; 至高无上 toplevel id; 孩子亲切; 孩子的身份.(如果有多个级别的祖先,则必须包含这些级别.) (5认同)
  • id仅对于该特定实体组是唯一的.id只是密钥的一部分,也包括父实体.get_by_id将需要重建完整的实体密钥以获取实体. (4认同)