我有一个型号 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 的区别。
