gpt4 book ai didi

python - 如何在 App Engine 中表示一对一关系

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:56 26 4
gpt4 key购买 nike

假设您有一个要存储在数据存储中的“用户”记录的概念。

class User (db.Model):
first_name = db.StringProperty()
last_name = db.StringProperty()
created = db.DateTimeProperty(auto_now_add=True)
twitter_oauth_token = db.StringProperty()
twitter_oauth_secret = db.StringProperty()

有一些字段是您几乎每次使用用户对象时都想使用的,例如 first_name 和 last_name。

但是,有些字段您只有一个用例,例如 twitter_oauth_token 和 twitter_oauth_secret,当 95% 的时间不需要它们时,对它们进行序列化和反序列化有点低效。

因此,如果您将模型拆分:

class User (db.Model):
first_name = db.StringProperty()
last_name = db.StringProperty()
created = db.DateTimeProperty(auto_now_add=True)

class UserTwitterOauth(db.Model):
oauth_token = db.StringProperty(required=True)
oauth_secret = db.StringProperty(required=True)
created = db.DateTimeProperty(auto_now_add=True)

您可以在 UserTwitterOauth 中为用户放置一个 ReferenceProperty,但这实际上是一对多的,因为没有什么可以阻止每个用户有多个 UserTwitterOauth 对象。您希望最多有一个与任何用户相关的 UserTwitterOauth。如何在一对一的基础上关联这些模型?

最佳答案

在这种特定情况下,您最好的选择可能是使 UserTwitterOauth 实体成为 User 实体的子实体,并使用众所周知的 key 名称,如下所示:

my_user = User(first_name="John", last_name="Smith")
my_user.put()
extra_info = UserTwitterOauth(parent=my_user, key_name="UserTwitterOauth")
extra_info.put()

您可以向 User 类添加一个简单的方法或属性,以便轻松检索附加信息,并向 UserTwitterOauth 添加一个类方法以充当工厂方法,保留约定。

顺便说一下,User 是一个危险的实体名称 - Users API 也有一个名为 User 的类,除非您对导入非常小心, 当您打算提到另一个时,您可能最终会提到一个。

关于python - 如何在 App Engine 中表示一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6268434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com