外键,sqlalchemy烧瓶中的模型之间的关系

时间:2019-10-16 18:57:46

标签: python python-3.x flask-sqlalchemy

我有以下两种模型:

class User(db.Model, UserMixin):
    __tablename__ = 'users'
    __table_args__ = (
        PrimaryKeyConstraint('id',),
    )

    id       = db.Column(db.Integer, primarky_key=True)
    username = db.Column(db.String, unique=True, nullable=False)
    email    = db.Column(db.String, unique=True, nullable=False)
    password = db.Column(db.String, nullable=False)


class Review(db.Model):
    __tablename__ = 'reviews'
    __table_args__ = (
        PrimaryKeyConstraint('id', ),
    )
    id        = db.Column(db.Integer, primary_key=True)
    content   = db.Column(db.Text, nullable=False)

我想在这两个表之间创建一个关系,以便当用户编写评论时,应转到评论模型,并且它与用户模型中的user_id有关系。我尝试了很多答案,但是它们返回的错误类型令我感到困惑,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您可以使用db.relationship在用户和评论之间建立一对多的关系。

class User(db.Model, UserMixin):
    __tablename__ = 'users'
    __table_args__ = (
        PrimaryKeyConstraint('id',),
    )

    id       = db.Column(db.Integer, primarky_key=True)
    username = db.Column(db.String, unique=True, nullable=False)
    email    = db.Column(db.String, unique=True, nullable=False)
    password = db.Column(db.String, nullable=False)
    reviews = db.relationship('Review', backref='user', cascade='all, delete, delete-orphan')


class Review(db.Model):
    __tablename__ = 'reviews'
    __table_args__ = (
        PrimaryKeyConstraint('id', ),
    )
    id        = db.Column(db.Integer, primary_key=True)
    content   = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)

这将允许user.reviewsreview.user

答案 1 :(得分:0)

尝试一下:

user_id = db.Column(db.Integer, db.ForeignKey('user.id')) user = db.relationship(User, backref='user_reviews', lazy=True)

并阅读documentation