Flask-SQLAlchemy - 按上游外键过滤

时间:2016-12-09 10:56:08

标签: python python-3.x flask flask-sqlalchemy

给定表格结构:

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

0 个答案:

没有答案