python - 复杂的“Flask”——涉及许多表的 SQLAlchemy 查询
问题描述
我有 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
它们可以是多个查询,也可以只是一个。如果有人能提供帮助或提供一些可以提供帮助的资源,我将不胜感激。我看过其他类似的问题,但我是这个主题的新手,无法推断。
解决方案
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)
推荐阅读
- javascript - 获取json数据内容
- html - 将 css 框移动到屏幕顶部
- google-sheets - 遍历一个表,然后在查询后创建多行
- function - 我们可以将函数的返回值分配给c中的宏吗
- java - Quarkus 是否提供任何东西来 gzip 压缩 servlet 响应?
- excel - 在一个工作表上,如果 O6:O443 中的日期是公式,我想有条件地格式化从 (O6:O443) 中提取日期的单元格 (N552:N579) 以灰色阴影
- cplex - 我的多程车辆路线问题没有解决方案
- python-3.x - 如何使用 Camelot 在 PDF 中搜索文本并获取表格区域?
- django - 找不到 Django 404 错误页面...当前路径与最后一个匹配
- reactjs - AsyncStoragePackage 被多次定义