我有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()
有关使用
filter
和filter_by
的区别,请参见this question。关于python - sql alchemy筛选结果的联接模型的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7703008/