Python SQLAlchemy-通过上游外键进行过滤
给定表结构:Python SQLAlchemy-通过上游外键进行过滤,python,python-3.x,flask,flask-sqlalchemy,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 如何基于上游表中的外键筛选查询?i、 e.返回按主题筛选的项目选择 如果我使用: q = Projects.query.filter( Programmes.theme_id==1 ) 然后生成的SQL不包括联接,因此返回整个集合 我可以通过运行p
themes
theme_id
theme_name
programmes
prog_id
prog_name
theme_id FK
projects
proj_id
proj_title
prog_id FK
如何基于上游表中的外键筛选查询?i、 e.返回按主题筛选的项目选择
如果我使用:
q = Projects.query.filter(
Programmes.theme_id==1
)
然后生成的SQL不包括联接,因此返回整个集合
我可以通过运行programs查询来解决这个问题,首先获取这些ID的列表,然后使用.in.
过滤项目,但我觉得我缺少了一些明显的东西,无法利用这些关系
解决方法
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'))
你试过了吗?另外,你能发布你的模型吗?你可能想做一个复合过滤器。类似于答案中显示的内容,因此使用
==
而不是=
删除关键字错误表达式,但现在返回整个项目集是否有方法查看由Alchemy生成的SQL?您可以打印查询对象。IEq=Projects.query.filter(foo);打印(q)
Ok,因此查询中缺少联接,因此我猜模型中存在问题