Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python googleappengine db.key()_Python_Google App Engine - Fatal编程技术网

Python googleappengine db.key()

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):

您好,我正在浏览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):
  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””。