gpt4 book ai didi

python - 为什么模型有 key_name 在 google-app-engine 上没有 key().id()

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:03 26 4
gpt4 key购买 nike

如果我使用这个:

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

谢谢

最佳答案

你不能,因为它们是同一回事。

实体具有编码字符串键加上整数 ID 或字符串名称这一事实可能会给人一种误导印象,即引用实体的各种方式是重叠或冗余的。他们不是。

键名就像文件系统中的文件名。 ID 就像系统自动选择的文件名。 key 本身就像文件的完整路径,包括目录。

考虑 Key.from_path 方法:

k = Key.from_path('User', 'Boris', 'Address', 9876)

kind=User&name=Boris 就像一个目录,kind=Address&name=9876 就像一个包含您的实体的文件。返回的 key 只是该路径的编码版本。

App Engine 依赖于每个实体都有一个固定的、不可变的路径,因此是一把 key 。如果一个实体可以用用户分配的名称系统分配的 ID 表示,这意味着具有 n 个祖先的单个实体可以有 2^(n +1) 不同的路径和 key 。

关于python - 为什么模型有 key_name 在 google-app-engine 上没有 key().id(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3276558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com