复杂的“Flask”SQLAlchemy查询涉及许多表

2024-09-24 02:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有5张桌子:

用户、项目、Dg、Ds和R

项目有3种隐私模式:私人、公共、项目

我需要的是:

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

这些关系是:

1N用户项目

1N工程总经理

1N用户Dg

1N Dg Ds

1N Ds R

它们可以是多个查询,也可以只是一个查询。如果有人能帮忙,或者提供一些可以帮助的资源,我将不胜感激。我已经研究过其他类似的问题,但我对这门学科还不熟悉,无法推断


Tags: 项目用户project关系mode模式ds私人
1条回答
网友
1楼 · 发布于 2024-09-24 02:22:59
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)

相关问题 更多 >