Flask SQLAlchemy,加入后访问多对多关系

时间:2015-07-01 12:59:25

标签: python sql database flask sqlalchemy

我在名为User的{​​{1}}和Paper之间设置了多对多关系。我还在paperauthorsReview之间设置了一对多关系。

我无法弄清楚如何加入PaperPaper表格而不会失去使用Review获取作者列表的能力。

这是我的模特

Paper.authors

首先我尝试了:

paperauthors = db.Table('paperauthors',
                        db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
                        db.Column('paper_id', db.Integer, db.ForeignKey('papers.id'))
                        )


class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(64))
    last_name = db.Column(db.String(64))
    email = db.Column(db.String(64), unique=True, index=True)


class Paper(db.Model):
    __tablename__ = 'papers'
    id = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    title = db.Column(db.Text)
    abstract = db.Column(db.Text)
    authors = db.relationship("User",
                    secondary=paperauthors,
                    backref="papers")


class Review(db.Model):
    __tablename__ = 'reviews'
    id = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    paper = db.Column(db.Integer, db.ForeignKey('papers.id'))
    reviewer = db.Column(db.Integer, db.ForeignKey('users.id'))
    evaluation = db.Column(db.Integer)

但是allReviews = Review.query.join(Paper).add_columns(Paper.title, Paper.authors, Review.timestamp, Review.reviewer, Review.evaluation).all() 字段是一个bool。我猜这是因为我在数据库行和列的上下文中操作,而不是python .authors模型。

我也尝试过:

Paper

这种方式允许我访问allReviews = Paper.query.outerjoin(Review, Review.paper == Paper.id).all() 方法,但由于我在Paper.authors python模型的上下文中操作,我无法访问审阅者和评估的Paper字段

如何从两个表中获取数据,包括多对多数据?

0 个答案:

没有答案