【问题标题】:Modify a Google App Engine entity id?修改 Google App Engine 实体 ID?
【发布时间】:2012-10-19 15:05:37
【问题描述】:

我正在使用 Google App Engine NDB。有时我想在指定列表中获取所有具有电话号码的用户。为此使用查询非常昂贵,所以我想我只需将 User 实体的 id 值设为用户的电话号码,这样我就可以直接通过 id 获取。

问题在于电话号码字段是可选的,因此最初创建的用户实体没有电话号码,因此没有 id 值。所以它将被创建为user = User(),而不是user = User(id = phone_number)

因此,当用户稍后决定将电话号码添加到他的帐户时,是否可以将该用户实体的 id 值修改为新的电话号码?

【问题讨论】:

  • 也许我没听懂?获取旧的实体 id,删除它并放入新的实体 id。
  • @voscausa 好吧,它是同一个实体。 id 是实体的键。在 NDB 中,它被称为 id 而不是 key_name
  • NDB Docs:要检索或创建的键名(即字符串键 ID)。所以当它是一个字符串时,它是一个键名。
  • @voscausa 对,所以现在可以在创建实体后更改此 key_name 吗?
  • 是的,我想是的。 Guido 认为没有理由使用额外的方法来获取 key_name。因为您可以识别“NDB id”是否包含 id 或名称(数据存储)。

标签: python google-app-engine


【解决方案1】:

实体 ID 构成实体主键的一部分,因此无法更改。更改它与使用新密钥创建新实体并删除旧实体相同 - 如果您愿意,这是您可以做的一件事。

更好的解决方案是创建一个PhoneNumber 类型,它提供对关联User 的引用,允许您使用get 操作进行查找,但不要求每个用户都只有一个电话号码。

【讨论】:

  • 如何参考 NDB?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
相关资源
最近更新 更多