给定表格结构:
themes
theme_id
theme_name
programmes
prog_id
prog_name
theme_id FK
projects
proj_id
proj_title
prog_id FK
如何根据上游表中的外键过滤查询?即返回按主题过滤的项目选择。
如果我使用:
q = Projects.query.filter(
Programmes.theme_id==1
)
然后生成的SQL不包含连接,因此返回整个集合。
我可以通过首先运行程序查询来获取这些ID的列表然后使用.in_()
过滤项目来解决这个问题,但我觉得我遗漏了一些显而易见的事情,以便能够利用这些关系。 / p>
解决方法
qprg = Programmes.query.filter_by(theme_id=1)
qprj = Projects.query.filter(
Projects.programme_id.in_(
[p.programme_id for p in qprg.all()]
))
模型
class Themes(db.Model):
theme_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
programmes = db.relationship("Programmes", backref="theme")
class Programmes(db.Model):
programme_id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(2048))
cluster_id = db.Column(db.Integer)
theme_id = db.Column(db.Integer, db.ForeignKey('themes.theme_id'))
projects = db.relationship("Projects", backref="programme")
class Projects(db.Model):
project_id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(2048))
programme_id = db.Column(db.Integer,
db.ForeignKey('programmes.programme_id'))