sqlalchemy左将在与Group的多个表上加入

发布于 2025-02-12 01:56:33 字数 854 浏览 0 评论 0原文

我有查询的组:

        dis_data = db.session.query(Dis, DisUser, DTypes, DisUser.did,
        func.count(DisUser.did).label('dis_count')).\
        filter(Dis.id == DisUser.did, Dis.tid==DTypes.id).\
        group_by(DisUser.did).all()

但是,它仅从用户选择的dis返回项目。 Disser与DIS和用户之间保持了许多一对一的关系。但是我想让所有项目陷入困境。 如何将其更改为左外联接?

我尝试了错误的错误:

    _data = db.session.query(Dis, DTypes, DisUser.did, 
    func.count(DisUser.did).label('dis_count')).\
    select_from(Dis, DTypes).outerjoin(DisUser).\
    filter(Dis.id == DisUser.did, Dis.tid==DTypes.id, 
           DTypes.id == dtype).group_by(DisUser.did).all()

错误:

sqlalchemy.exc.invalidrequesterror:不知道如何在0x7f88d80cd520上加入< lt; DUSUSER>。请使用.select_from() 建立明确的左侧的方法,并提供 在条款上明确说明,如果没有出现,以帮助解决 歧义。

I have this group by query:

        dis_data = db.session.query(Dis, DisUser, DTypes, DisUser.did,
        func.count(DisUser.did).label('dis_count')).\
        filter(Dis.id == DisUser.did, Dis.tid==DTypes.id).\
        group_by(DisUser.did).all()

However it only returns items from Dis which a user selected. DisUser holds this many-to-many relation between Dis and User. But I want to have all items in Dis.
How can I change it to a left outer join?

I tried this which gives error:

    _data = db.session.query(Dis, DTypes, DisUser.did, 
    func.count(DisUser.did).label('dis_count')).\
    select_from(Dis, DTypes).outerjoin(DisUser).\
    filter(Dis.id == DisUser.did, Dis.tid==DTypes.id, 
           DTypes.id == dtype).group_by(DisUser.did).all()

The error:

sqlalchemy.exc.InvalidRequestError: Don't know how to join to <Mapper at 0x7f88d80cd520; DisUser>. Please use the .select_from()
method to establish an explicit left side, as well as providing an
explicit ON clause if not present already to help resolve the
ambiguity.

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

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

发布评论

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

评论(1

萌酱 2025-02-19 01:56:34

我解决了此查询,关键是在Groupby中,我应该使用左表的列:

_data = db.session.query(Dis,DTypes,
         func.count(DisUser.did).label('dis_count'))\
  .outerjoin(DisUser, Dis.id==DisUser.did)\
  .filter(DTypes.id == Dis.tid, DTypes.id == dtype)\
  .group_by(Dis.id)

I solved the query with this, the point is that in groupby I should use a column from left table:

_data = db.session.query(Dis,DTypes,
         func.count(DisUser.did).label('dis_count'))\
  .outerjoin(DisUser, Dis.id==DisUser.did)\
  .filter(DTypes.id == Dis.tid, DTypes.id == dtype)\
  .group_by(Dis.id)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文