使用SQLAlchemy,如何在类中创建一个字段,该类是所述类的其他实例的列表? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SQLAlchemy,如何在类中创建一个字段,该类是所述类的其他实例的列表? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有一个用户类,详情如下:

class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.Unicode(length=128), unique=True)
    username = db.Column(db.Unicode(length=128), unique=True)
    _password = db.Column("password", db.String(length=60))
    admin = db.Column(db.Boolean, default=False)
    joined = db.Column(db.DateTime, default=datetime.utcnow)
    confirmed = db.Column(db.Boolean, default=False)
    profile_picture = db.Column(db.Unicode(length=128), unique=True, nullable=True)
    twitter = db.Column(db.Unicode(length=256), unique=True, nullable=True)
    github = db.Column(db.Unicode(length=256), unique=True, nullable=True)

我想在用户类中添加另一列,这是一个用户列表。我怎么能做到这一点?

我认为我所寻找的正确名称是一种自我参照的一对多关系。

答案

根据您的评论,您希望存储一个关联表,该关联表存储哪个用户跟随哪个用户。这就是众所周知的多对多关系。由于用户可以跟随许多其他用户,并且许多用户可以跟随用户。

为此,我们需要定义一个额外的表,并使用relationshiphttp://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#many-to-many)来指定该表的用法,例如:

class UserFollows(db.Model):
    __tablename__ = 'user_follows'

    follower = Column(Integer, ForeignKey('users.id'))
    followee = Column(Integer, ForeignKey('users.id'))

现在我们可以为User类定义两个虚拟列,并指定SQLAlchemy应该查看user_follows表:

class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.Unicode(length=128), unique=True)
    username = db.Column(db.Unicode(length=128), unique=True)
    _password = db.Column("password", db.String(length=60))
    admin = db.Column(db.Boolean, default=False)
    joined = db.Column(db.DateTime, default=datetime.utcnow)
    confirmed = db.Column(db.Boolean, default=False)
    profile_picture = db.Column(db.Unicode(length=128), unique=True, nullable=True)
    twitter = db.Column(db.Unicode(length=256), unique=True, nullable=True)
    github = db.Column(db.Unicode(length=256), unique=True, nullable=True)
    followers = db.relationship('User', 
        secondary = followers, 
        primaryjoin = (UserFollows.c.follower == id), 
        secondaryjoin = (followers.c.followee == id))
    follows = db.relationship('User', 
        secondary = followers, 
        primaryjoin = (UserFollows.c.followee == id), 
        secondaryjoin = (followers.c.follower == id))

现在,User对象有两个属性followersfollows,它们充当用户的集合,存储User follows以及followersUser

以上是关于使用SQLAlchemy,如何在类中创建一个字段,该类是所述类的其他实例的列表? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Postgres 在 SQLAlchemy 中创建表?

如何在 python 中使用 sqlalchemy 在查询中创建 sql server 表变量

如何在 SQLAlchemy 1.2.7 中创建没有定义类的新表

如何在类中创建模板函数? (C ++)

使用 PostgreSQL 在 SQLAlchemy 测试中创建数据库

使用 Flask 中的 SQLAlchemy 会话会引发“在线程中创建的 SQLite 对象只能在同一线程中使用”