开发者

why model has the key_name don't has the key().id() on google-app-engine

if i use this :

class A(db.Model):
    a=db.StringProperty()

class demo(BaseRequestHandler):
    def get(self):
        a=A()
        a.a='sss'
        a.pu开发者_运维技巧t()
        raise Exception(a.key().id())

i can get the a.key().id() is 961

but if i add key_name="aaa" , the a.key().id() will be 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())

so how can i get the key().id() when i set a key_name

thanks


You can't, because they're the same thing.

The fact that entities have an encoded string key plus either an integer ID or a string name can give the misleading impression that the various ways to refer to an entity are overlapping or redundant. They're not.

A key name is like a filename within a filesystem. An ID is like a filename that the system has picked automatically. The key itself is like the full path to the file, including directories.

Consider the Key.from_path method:

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

kind=User&name=Boris is like a directory, and kind=Address&name=9876 is like a file containing your entity. The key returned is just an encoded version that path.

App Engine relies on each entity have one fixed, immutable path, ergo one key. If an entity could be represented by both a user-assigned name and a system-assigned ID, this would mean that a single entity with n ancestors could have 2^(n+1) different paths and keys.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜