zjm*_*126 3 python google-app-engine key
如果我使用这个:
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())
Run Code Online (Sandbox Code Playgroud)
我可以得到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())
Run Code Online (Sandbox Code Playgroud)
那么当我设置key_name时,如何获得key().id()
谢谢
你不能,因为他们是一回事.
实体具有编码的字符串键加上整数ID或字符串名称的事实可能会给出误导性的印象,即引用实体的各种方式是重叠的或冗余的.他们不是.
密钥名称就像文件系统中的文件名.ID就像系统自动选择的文件名.密钥本身就像文件的完整路径,包括目录.
考虑Key.from_path
方法:
k = Key.from_path('User', 'Boris', 'Address', 9876)
kind=User&name=Boris
就像一个目录,kind=Address&name=9876
就像一个包含你的实体的文件.返回的密钥只是路径的编码版本.
App Engine依赖于每个实体都有一个固定的,不可变的路径,ergo一键.如果实体可以由用户指定的名称和系统分配的ID表示,则这意味着具有n个祖先的单个实体可以具有2 ^(n + 1)个不同的路径和密钥.