2010-09-30 141 views
0

您好,我正在閱讀GAE的文檔,需要一個小的澄清。如果我有我的數據庫模型是這樣的: -谷歌appengine-db.key()

class Phone(Model): 
    phone_name = db.StringProperty() 

r = Phone(Nokia, key_name='first') 
r.put() 

現在,如果我要找回這個實體,但我不知道密鑰,我可以構建這樣的關鍵:

k=db.Key('Phone','first') 

,一旦關鍵是構造,實體可以像這樣檢索: -

r=db.get(k) 

回答

2

你很近。唯一的主要區別是,你必須使用Key.from_path()工廠方法,而不是默認的構造函數,你必須通過實際的類,而不是代表的類名的字符串,並

class Phone(Model): 
    phone_name = db.StringProperty() 

r = Phone(phone_name='Nokia', key_name='first') 
r.put() 

k = db.Key.from_path('Phone', 'first') 

r = db.get(k) 

整體上但是,我發現依靠自動生成的ID通常是比指定自己的鍵名更好的解決方案。你有沒有特別的理由去做後者?

+0

非常感謝!我剛剛學習 – Rasmus 2010-09-30 10:57:37

+1

我不認爲自動生成的ID更好,它們只是有不同的用例。如果您在存儲實體之前擁有可預測的固定唯一標識符,則鍵名稱是非常好的解決方案。 – 2010-09-30 11:10:32

+0

我同意每個人都有他們的使用(因此「通常」)。只是在大多數情況下,您會重複生成唯一ID的工作,尤其是因爲最後,傳遞編碼密鑰而不是ID或名稱會更方便。 – 2010-09-30 11:18:25