Python 模型类关系字段中的SQLAlchemy多表联接
让我们假设有3个表或模型类的情况:Python 模型类关系字段中的SQLAlchemy多表联接,python,sqlalchemy,Python,Sqlalchemy,让我们假设有3个表或模型类的情况: 使用者 学校 主题 在这种关系中: UsermanytomySchoolmanytomySubject。 这些多对多关系在关联表中定义如下: school_user = db.Table('school_user ', db.Column('user_id', db.Integer, db.ForeignKey('users.id')), db.Column(school_
- 使用者
- 学校
- 主题
User
manytomySchool
manytomySubject
。
这些多对多关系在关联表中定义如下:
school_user = db.Table('school_user ',
db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
db.Column(school_id', db.Integer, db.ForeignKey('schools.id')))
subject_school = db.Table('subject_school ',
db.Column('school_id', db.Integer, db.ForeignKey('schools.id')),
db.Column('subject_id', db.Integer, db.ForeignKey('subjects.id')))
class User(db.Model):
schools= db.relationship('School', secondary=school_user , backref=db.backref('users', lazy='dynamic'))
class Subject(db.Model):
schools= db.relationship('School',
secondary=subject_school,
backref=db.backref('subjects',
lazy='dynamic'))
我想查询用户参加的学校
的所有科目
我可以通过以下方式轻松实现:
class User:
@property
def subjects(self):
return (Subject
.query
.join(School, Subject.schools)
.join(User, School.users)
.filter(User.id == self.id)
.all())
我的问题:是否可以通过使用primaryjoin
和secondaryjoin
通过SQLAlchemy关系字段实现?类似(不工作,用于演示目的):
显然,上面的示例中缺少用户连接,因为我不知道如何正确地应用它
class User:
subjects = db.relationship('Subject',
secondary=subject_school,
secondaryjoin='School.id==subject_school.c.school_id',
primaryjoin='Subject.id==subject_school.c.subject_id')