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。我猜这是因为我是在数据库行和列的上下文中操作的,而不是pythonPaper
模型
我还尝试:
allReviews = Paper.query.outerjoin(Review, Review.paper == Paper.id).all()
通过这种方式,我可以访问Paper.authors
方法,但由于我是在Paper
python模型的上下文中操作的,因此我无法访问reviewer和evaluation的Review
字段
如何从两个表(包括多对多数据)中获取数据