繁体   English   中英

归档在用户列表的SQLAlchemy中

[英]Filed in SQLAlchemy of user's list

我有一个模型,即“用户”,其中该模型中有一个字段,我想存储“用户”列表。 这个想法是,您可以添加油炸物并将其存储在某个地方。

class User (db.Model):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    username = Column(String(50), unique = True)
    email = Column(String(120), unique = True)
    password = Column(String(50))
    date = Column(DateTime(), default=datetime.now())
    friends = "Should be a list of users"

我以为有一个字符串,每个字符串的ID为每个用户的ID,但是,是否有可能通过与同一模型的关系来做到这一点? 像这样:

friends = relationship("User")

非常感谢!

基于Adjacency List Relationships建议解决方案仅在某人可以成为最多一个人的朋友的情况下才有效,我认为在现实世界中并非如此。

在这种情况下,您需要应用的模式称为自参考多对多关系 请阅读上面链接的示例。 为了使其适用于您的模型,您需要创建其他表来保留成对的朋友,并按如下所示配置关系:

# object model
t_userfriend = Table("user_friend", Base.metadata,
    Column("user_id", Integer, ForeignKey("users.id"), primary_key = True),
    Column("friend_id", Integer, ForeignKey("users.id"), primary_key = True),
)

class User (Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique = True)
    # ...
    friends = relationship("User",
                          secondary = t_userfriend,
                          primaryjoin = (id == t_userfriend.c.user_id),
                          secondaryjoin = (id == t_userfriend.c.friend_id),
                          backref = "friend_of",
                          )

我想您需要问自己的另一个问题是,在模型中A是否是B的朋友,这是否意味着B是A的朋友? 万一这是真的,您可能想要/需要:

  1. 要么只存储关系的一侧,然后计算另一侧
  2. 确保您始终将双方都存储在关系中

您可以使用邻接列表关系,并且此链接具有相同的问题,因此您可以从中学习。 如何在SQLAlchemy(python,flask)中为模型用户建立多对多关系

是的,您可以使用邻接列表关系来做到这一点。

class User (db.Model):

    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    username = Column(String(50), unique = True)
    email = Column(String(120), unique = True)
    password = Column(String(50))
    date = Column(DateTime(), default=datetime.now())
    friends = relationship("User",
            backref=backref('parent', remote_side=[id])
        )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM