繁体   English   中英

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

[英]Complex “Flask”-SQLAlchemy query involving many tables

我有 5 张桌子:

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

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

我需要的是如下:

  • Project.mode 为公共的项目中 DG 的所有 R
  • 如果 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

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM