【问题标题】:Changing Model's key_Name + App Engine更改模型的 key_Name + App Engine
【发布时间】:2023-03-08 21:35:01
【问题描述】:

我打算为我的应用程序这样做:

  1. 将唯一 id 存储到用户模型的 key_name 中。
  2. 在给定的任何时间,用户将被允许选择一次用户名,我打算用用户选择的用户名替换模型的原始 key_name。
  3. 在我的实现中,任何新用户,只有在用户被激活时才会创建用户模型。

根据情况,我的问题是,以下哪种方法更好?

  1. 在用户登录时,用户必须选择一个用户名,这样我就可以使用 keyname = username 选择创建用户模型。但是,这种方法可能会让用户感到不快,因为他们应该可以随时选择用户名。
  2. 上述情况中解释的方法,但是我需要做clone_entity。但是,使用 clone_entity,是否会将引用属性分配回新的克隆实体?而且,性能是重中之重,如果同时涉及很多用户,这在数据库操作方面会不会很昂贵?

【问题讨论】:

  • 需要使用user_name作为key吗?我认为用户名可以是一个简单的字段。
  • 绝对!保存数据库操作。

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


【解决方案1】:

如果您一心想要将 user_name 作为键,任何一种方法都应该可以正常工作(假设您有防止重复用户名的逻辑)

但是,使用 clone_entity,引用属性会被分配回新的克隆实体吗?

如果克隆实体正确完成,引用属性将被复制而不会出现问题。但是,如果您有任何实体引用您正在克隆的实体,这些实体将不会更新为引用该实体的新克隆。

另外,性能是重中之重,如果同时涉及很多用户,这在数据库操作方面会不会很昂贵?

只要有效地实现克隆并假设您传入要克隆的实体,则每次克隆调用(新创建实体的放置)应该只有一个数据库操作。

看起来您链接的 clone_entity 有一个更新,可以避免对引用属性进行过多的 db 调用,所以您应该很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 2011-05-06
    相关资源
    最近更新 更多