【问题标题】:Complex "Flask"-SQLAlchemy query involving many tables复杂的“Flask”——涉及许多表的 SQLAlchemy 查询
【发布时间】:2020-05-18 17:31:03
【问题描述】:

我有 5 张桌子:

用户、项目、Dg、Ds 和 R。

Project 有 3 种隐私模式:private、public、project

我需要的如下:

  • Project.mode 为公共的项目中所有 R 的 DG
  • 如果 Project.mode=private 则属于该项目中用户 DG 的所有 R
  • 如果 Project.mode= project,则属于同一项目中所有其他用户的 DG 的所有 R

关系是:

1 n 用户项目

1 n 项目 Dg

1 n 用户 Dg

1 n Dg Ds

1 n Ds R

它们可以是多个查询,也可以是一个。如果有人能提供帮助或提供一些可以提供帮助的资源,我将不胜感激。我看过其他类似的问题,但我是这个主题的新手,无法推断。

【问题讨论】:

    标签: python sql flask sqlalchemy flask-sqlalchemy


    【解决方案1】:
    from sqlalchemy.orm import aliased
    
    Dg2 = aliased(Dg)
    # project-wide visible R
    result1 = db.session.query(
        R, Ds.name).join(
        Ds).join(
        Dg).join(
        Project).filter(
            Project.acces_rights == 'project').join(
        Dg2).filter(
            Dg2.user_id == user_id)
    
    # personal R
    result2 = db.session.query(
        R, Ds.name).join(
        Ds).join(
        Dg).filter(
            Dg.user_id == user_id).join(
        Project).filter(
            Project.acces_rights == 'own'
        )
    
    # all publicly visible reading points
    result3 = db.session.query(
        R, Ds.name).join(
        Ds).join(
        Dg).join(
        Project).filter(
            Project.acces_rights == 'public')
    
    results = result1.union(result2).union(result3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多