Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy-通过上游外键进行过滤_Python_Python 3.x_Flask_Flask Sqlalchemy - Fatal编程技术网

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?您可以打印查询对象。IE
q=Projects.query.filter(foo);打印(q)
Ok,因此查询中缺少联接,因此我猜模型中存在问题