将查询输出作为输入传递给 SQLAlchemy 中另一个查询的 in 子句

Shr*_*dha 3 python sqlalchemy flask-sqlalchemy

我有 2 个表(比如StudentCollege)和第三个表(StudentCollege),其中有student_idcollege_id外键。

我想给出以下查询的输出:

list = (
    db.session.query(StudentCollegeModel.College_id)
    .filter(StudentCollegeModel.student_id== student_id)
    .all()
)
Run Code Online (Sandbox Code Playgroud)

以下查询:

(
    db.session.query(CollegeModel)
    .filter(CollegeModel.College_id.in_(list))
    .all()
)
Run Code Online (Sandbox Code Playgroud)

但它给出了编程错误。

Sup*_*oot 7

您无需执行第一个查询即可将其用作第二个查询中的子查询。这使您不必College_id在进行in_()查询之前构建所有's 的内存列表,并且意味着您只需往返数据库一次。

subquery = (
    db.session.query(StudentCollegeModel.College_id)
    .filter(StudentCollegeModel.student_id== student_id)
)

result = (
    db.session.query(CollegeModel)
    .filter(CollegeModel.College_id.in_(subquery))
    .all()
)
Run Code Online (Sandbox Code Playgroud)