如果我使用它:
class A(db.Model):
a=db.StringProperty()
class demo(BaseRequestHandler):
def get(self):
a=A()
a.a='sss'
a.put()
raise Exception(a.key().id())
我可以得到a.key()。id()是961
但如果我添加key_name =“aaa”,则a.key()。id()将为None:
class A(db.Model):
a=db.StringProperty()
class demo(BaseRequestHandler):
def get(self):
a=A(key_name="aaa")
a.a='sss'
a.put()
raise Exception(a.key().id())
那么当我设置key_name
时,如何获得key()。id()感谢
答案 0 :(得分:6)
你不能,因为他们是一回事。
实体具有编码的字符串键加上整数ID或字符串名称的事实可能会给出误导性的印象,即引用实体的各种方式是重叠的或冗余的。他们不是。
键名称就像文件系统中的文件名。 ID就像系统自动选择的文件名。密钥本身就像文件的完整路径,包括目录。
考虑Key.from_path
方法:
k = Key.from_path('User', 'Boris', 'Address', 9876)
kind=User&name=Boris
就像一个目录,而kind=Address&name=9876
就像一个包含你的实体的文件。返回的密钥只是路径的编码版本。
App Engine依赖于每个实体都有一个固定的,不可变的路径,一个密钥。如果实体可以由用户指定的名称和表示系统分配的ID,则这意味着具有 n 祖先的单个实体可能具有2 ^(n +1)不同的路径和密钥。