SQLAlchemy Joinedload过滤器列

SQLAlchemy Joinedload过滤器列,第1张

SQLAlchemy Joinedload过滤器列

它不起作用的原因是

joinedload
(以及所有其他关系加载技术)是完全透明的。也就是说,
joinedload
查询中包含a不会导致填充关系,而不会以任何其他方式影响它。您应该阅读“加入渴望的禅宗”,其开头为:

由于急切的联合加载似乎与的使用非常相似

Query.join()
,因此经常混淆应何时使用以及如何使用它。了解区别的关键在于,尽管该区别
Query.join()
用于更改查询的结果,但
joinedload()
要花很长时间不更改查询的结果,而是隐藏呈现的联接的效果,以仅允许存在相关对象。

技巧之一是对无法使用的联接表使用别名。然后,您的查询最终在Work和User之间执行隐式交叉联接,从而在多余的行之间进行隐式交叉联接。因此,为了根据联接的表进行过滤,请使用

Query.join()

session.query(Work).    join(Work.company_users).    join(CompanyUser.user).    filter(Work.id == 1).    filter(User.first_name == 'The name').    all()

并且如果还需要适当的预加载,则可以使用以下命令指示查询已包含联接

contains_eager()

session.query(Work).    join(Work.company_users).    join(CompanyUser.user).    options(contains_eager(Work.company_users). contains_eager(CompanyUser.user)).    filter(Work.id == 1).    filter(User.first_name == 'The name').    all()

请注意对的链接调用

contains_eager()



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5646959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存