2012-06-15 38 views
4

我使用get_by_id()來讀取NDB實體的實體組中,我不明白這一點,並針對有實體組的一部分實體合作:NDB:如何使用get_by_id爲實體

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) 

輸出:

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 

是設計或者是一個錯誤嗎?當我使用命名空間(我正在使用SDK 1.6.6)時,我看到有關於get_by_id()的been some issues。我如何能從ID的父母文件夾?

回答

7

get_by_id(id, parent=None)需要一個父參數。
當您通過實體組中的ID進行查詢時,必須包含父鍵才能獲取所需的實體。

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

+1

的ID是唯一的,即使有父母,所以我不明白爲什麼它不應該是可以通過其ID來獲得和實體即使這裏是父母。 –

+4

一個id只對那個特定的實體組是唯一的。一個id只是一個鍵的一部分,它也包含父實體。 get_by_id將需要重建完整的實體鍵以獲取實體。 – aschmid00

+0

謝謝aschmid00。我理解這一點的方式是,沒有父母和祖先的實體形成自己的實體組。如果是這種情況,則對於整個模型類,id必須是唯一的。我錯了嗎? –