复杂的“flask”-涉及多个表的sqlalchemy查询

6ioyuze2  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(436)

我有5张table:
用户、项目、dg、ds和r。
project有3种隐私模式:private、public和project
我需要的是:
project.mode为public的项目中的所有DG
如果project.mode=private,则属于该项目中用户DG的所有r
如果project.mode=project,则属于同一项目中所有其他用户DG的所有r
这些关系是:
1个用户项目
1N项目dg
1 n用户dg
1个dg ds
1个ds r
它们可以是多个查询,也可以只是一个查询。如果有人能帮忙,或者提供一些可以帮助的资源,我将不胜感激。我也研究过其他类似的问题,但我对这个问题还不熟悉,不能推断。

rfbsl7qr

rfbsl7qr1#

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)

相关问题