Python googleappengine db.key()
您好,我正在浏览GAE的文档,需要一点澄清。如果我的db模型是这样的:-Python googleappengine db.key(),python,google-app-engine,Python,Google App Engine,您好,我正在浏览GAE的文档,需要一点澄清。如果我的db模型是这样的:- class Phone(Model): phone_name = db.StringProperty() r = Phone(Nokia, key_name='first') r.put() r=db.get(k) 现在,如果我必须检索这个实体,但我不知道密钥,我可以这样构造密钥: k=db.Key('Phone','first') 一旦构造了密钥,可以像这样检索实体:- class Phone(Model):
class Phone(Model):
phone_name = db.StringProperty()
r = Phone(Nokia, key_name='first')
r.put()
r=db.get(k)
现在,如果我必须检索这个实体,但我不知道密钥,我可以这样构造密钥:
k=db.Key('Phone','first')
一旦构造了密钥,可以像这样检索实体:-
class Phone(Model):
phone_name = db.StringProperty()
r = Phone(Nokia, key_name='first')
r.put()
r=db.get(k)
你很接近。唯一的主要区别是必须传递实际类而不是表示类名的字符串,并且必须使用
键。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通常比指定自己的密钥名更好。您使用后者有什么特别的原因吗?我不认为自动生成的ID更好,它们只是有一个不同的用例。如果在存储实体之前有一个可预测的、固定的、唯一的标识符,那么键名是一个非常好的解决方案。我同意每个键名都有其用途(因此“通常”)。只是在大多数情况下,您会重复生成唯一ID的工作,特别是因为最终,传递编码密钥比传递ID或名称更方便。或者您也可以简单地使用r=Phone.get_by_key_name('first')这是错误的:from_path的种类参数是字符串种类名称,不是电话课。此外,Phone()构造函数是错误的-它不接受位置参数,因此第一个参数应该是“Phone_name=“Nokia””。