【问题标题】:why model has the key_name don't has the key().id() on google-app-engine为什么模型有 key_name 在 google-app-engine 上没有 key().id()
【发布时间】:2010-07-18 17:44:07
【问题描述】:

如果我用这个:

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

谢谢

【问题讨论】:

    标签: python google-app-engine key


    【解决方案1】:

    你不能,因为它们是一样的。

    实体具有编码的字符串键加上整数 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) 不同的路径和键。

    【讨论】:

    • 不错的分享!现在,我更明白了!
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多