Skip to main content
 首页 » 编程设计

python之sqlalchemy 过滤连接模型属性的结果

2025年05月04日17linjiqin

我有一个型号 X 和一个型号 Y。

Y 包含对 X.id 的外键引用,以及属性 x 可用的相关 X 条目的实例。

x_id = Column(Integer, ForeignKey('xtable.id'))     
x = relationship('X') 

X 也有一个 bool 属性 'publish'。

在 Y 上执行查询,我如何将结果过滤为 x.publish 为 True 的结果;

我试过这样做:

DBSession.query(Y).filter_by(x.publish = True).all()  

但这不起作用,我收到一条错误消息,指出关键字不能是表达式。我查看了 sql alchemy 文档以寻找解决方案,但我似乎找不到我要找的东西。有什么建议吗?

请您参考如下方法:

您需要在查询中添加一个 join 到类 X 并使用 filter 而不是 filter_by:

qry = DBSession.query(Y) 
qry = qry.join(X) 
qry = qry.filter(X.publish == True) 
qry.all() 

或一次性:

DBSession.query(Y).join(X).filter(X.publish == True).all() 

参见 this question关于使用 filter 和 filter_by 的区别。