从App Engine中的ReferenceProperty中获取Key / id

时间:2010-06-15 09:53:27

标签: python google-app-engine google-cloud-datastore

我可以在AppEngine土地上使用一点帮助...

使用[Python] API我从文档中创建了这个例子的关系:

class Author(db.Model):
    name = db.StringProperty()

class Story(db.Model):
    author = db.ReferenceProperty(Author)

story = db.get(story_key)
author_name = story.author.name

据我了解,该示例将进行两次数据存储查询。一个用于获取故事,然后一个用于尊重作者以便访问该名称。但我希望能够获取id,所以请执行以下操作:

story = db.get(story_key)
author_id = story.author.key().id()

我想只是从引用中获取id。我不想依赖(因此查询数据存储区)ReferenceProperty值。

从阅读文档中可以看出

  

ReferenceProperty的值是Key

这让我觉得我可以在引用的值上调用.id()。但它也说:

  

ReferenceProperty模型提供Key属性值的功能,例如自动解除引用。

在进行此引用时,我找不到任何解释的内容? 在ReferenceProperty的值上调用.id()是否安全? 是否可以假设调用.id()不会导致数据存储查找?

1 个答案:

答案 0 :(得分:26)

为了帮助其他搜索者而回答我自己的问题......

怀疑调用story.author.key()。id()甚至story.author.id()会导致数据存储区查询。正确的方法dictated by the API docs是:

story = db.get(story_key)
author_id = Story.author.get_value_for_datastore(story).id()