【问题标题】:get_by_id and parent Keyget_by_id 和父键
【发布时间】:2012-07-06 12:02:20
【问题描述】:

我曾经使用get_by_id 从数据存储区获取实体,但从不使用Ancestor Paths。但是我的模型的复杂性使它变得很有必要。事实上,祖先路径解决了一个大问题,但现在当我尝试 get_by_id 一个实体返回 None 时,如果该实体具有父键。这意味着我需要添加父Key:

entity = MyModel.get_by_id(id)

这将变成:

entity = MyModel.get_by_id(id, parent=key)

如何构建父Key?

编辑:

此时我更喜欢保留祖先路径并添加另一个 keyproperty。

【问题讨论】:

  • 注意get_by_id中的id是一个整数。
  • 谢谢,我知道了:int(self.request.get('id'))
  • 我不能直接回答你的问题,因为你父母的定义将非常依赖于你设计的数据模型。 get_by_id 中的父级可以是键或实体。我假设您已经阅读了如何构造密钥developers.google.com/appengine/docs/python/datastore/keyclass
  • parent() Returns the Key of the data entity's parent entity, or None if the entity has no parent. 如果我因为不知道 Parent 键而无法获取实体,我该如何使用此方法?注意:我使用的是NDB docs
  • 正如我所说,它非常依赖于您的数据模型。如何在您的模型和 URL 遍历方案中包含一些详细信息。这应该是显而易见的。

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


【解决方案1】:

如果你想使用实体组,你可以简单地创建一个这样的键:

key_parent = db.Key.from_path('MyModelParent', 'id_parent') # You don't have to create this kind in the datastore.

id = int(self.request.get('id'))
entity = MyModel.get_by_id(id, parent=key_parent)

我注意到:您对 key 参数使用了大写字母。它是父母而不是父母

entity = MyModel.get_by_id(id, Parent=key) # Wrong
entity = MyModel.get_by_id(id, parent=key)

哦,你正在使用 NDB:

key_parent = ndb.Key('MyModelParent', 'id_parent')

【讨论】:

  • 在我提出问题的时候,我什么都不知道:实体的 ID 不是绝对唯一的。那是因为在提出问题之前,我曾经在没有父母和数字 ID 的情况下进行编码。如果 ID 是唯一的(错误),我不明白为什么还要构建父键。
猜你喜欢
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
相关资源
最近更新 更多