我有X型和Y型。

Y包含对X.id的外键引用,并且相关X条目的实例可通过属性x获得。

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


X还具有布尔属性'publish'。

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

香港专业教育学院试图做这样的事情:

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


但这不起作用,我收到一个错误消息,说关键字不能是一个表达式。香港专业教育学院看过sql炼金术文档中的解决方案,但我似乎找不到我正在寻找什么。有什么建议么?

最佳答案

您需要在查询中为类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()


有关使用filterfilter_by的区别,请参见this question

关于python - sql alchemy筛选结果的联接模型的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7703008/

10-12 01:54