sql alchemy 过滤连接模型属性的结果

发布于 2024-12-09 01:23:38 字数 434 浏览 0 评论 0原文

我有一个模型 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 alchemy 文档来寻找解决方案,但我似乎找不到我要找的东西。有什么建议吗?

I have a model X and a model Y.

Y contains a foreign key reference to X.id, with a instance of the related X entry available by the property x.

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

X also has a boolean property 'publish'.

Executing a query on Y, how can i filter my results to those where x.publish is True;

Ive tried doing something like this:

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

But this doesnt work, i get an error saying keyword cant be an expression. Ive looked through the sql alchemy docs for a solution, but i cant seem to find what im looking for. Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烈酒灼喉 2024-12-16 01:23:39

其他选项是

您可以创建直接的新关系

,这样

x1 = relationship(X,
             primaryjoin='and_(X.id==Y.x_id, X.publish==True)'
             )

会自动加入。

Other option is

You can create direct new relationship

Like

x1 = relationship(X,
             primaryjoin='and_(X.id==Y.x_id, X.publish==True)'
             )

This will do join automatically.

橘和柠 2024-12-16 01:23:38

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

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

或在一个go:

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

有关差异,请参阅此问题使用过滤器之间和filter_by

You need to add a join in your query to class X and use filter instead of filter_by:

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

or in one go:

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

See this question regarding the difference between using filter and filter_by.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文