Python 模型类关系字段中的SQLAlchemy多表联接

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_

让我们假设有3个表或模型类的情况:

  • 使用者
  • 学校
  • 主题
在这种关系中:
User
manytomy
School
manytomy
Subject
。 这些多对多关系在关联表中定义如下:

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')