Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用炼金术,加入后访问多对多关系_Python_Sql_Database_Flask_Sqlalchemy - Fatal编程技术网

Python 使用炼金术,加入后访问多对多关系

Python 使用炼金术,加入后访问多对多关系,python,sql,database,flask,sqlalchemy,Python,Sql,Database,Flask,Sqlalchemy,我在用户和论文之间建立了多对多关系,称为论文作者。我也在评论和论文之间建立了一对多关系 我不知道如何加入论文和审阅表,同时又不失去获取论文作者列表的功能。作者 这是我的模型 paperauthors = db.Table('paperauthors', db.Column('user_id', db.Integer, db.ForeignKey('users.id')), db.Column('pap

我在
用户
论文
之间建立了多对多关系,称为
论文作者
。我也在
评论
论文
之间建立了一对多关系

我不知道如何加入
论文
审阅
表,同时又不失去获取
论文作者列表的功能。作者

这是我的模型

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()
但是
.authors
字段是一个bool。我猜这是因为我是在数据库行和列的上下文中操作的,而不是python
Paper
模型

我还尝试:

allReviews = Paper.query.outerjoin(Review, Review.paper == Paper.id).all()
通过这种方式,我可以访问
Paper.authors
方法,但由于我是在
Paper
python模型的上下文中操作的,因此我无法访问reviewer和evaluation的
Review
字段

如何从两个表(包括多对多数据)中获取数据