2010-09-30 84 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