如何在 SQLAlchemy 中查询关联表?

2024-02-24

我正在尝试将 SQL 查询转换为 SQLAlchemy 查询,以供用户在 get API 内使用。问题是我无法从关联表中查询任何内容。 (我确信我不知道该方法)。

ORM:

roles_users = db.Table(
    'roles_users',
    db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
    db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
     )

class Role(db.Model, RoleMixin):
   id = db.Column(db.Integer(), primary_key=True)
   name = db.Column(db.String(50), unique=True)
   description = db.Column(db.String(255))

   def __str__(self):
      return self.name

class User(db.Model, UserMixin):
   id = db.Column(db.Integer, primary_key=True)
   first_name = db.Column(db.String(50))
   last_name = db.Column(db.String(50))
   email = db.Column(db.String(50), unique=True)
   password = db.Column(db.String(255))
        .
        .
        .
   roles = db.relationship('Role', secondary=roles_users,
                        backref=db.backref('users', lazy='dynamic'))

   def __str__(self):
       return self.email

工作 SQL 查询:

select first_name, last_name, role.name from user 
    join roles_users 
       join role on user.id = roles_users.user_id 
           and role.id = roles_users.role_id;

我遇到问题的 SQLAlchemy 查询:

roles_users.query.join(Role).join(User)
   .filter(roles_users.user_id == User.id and 
       roles_users.role_id == Role.id).all()

我使用上面的 SQLAlchemy 查询时遇到错误:

AttributeError: 'Table' object has no attribute 'query'

如何使用 SQLAlchemy 执行与 SQL 查询等效的操作?


好的,所以在 Flask-Sql alchemy 中查询关联对象的关键是对 Roles_users 进行外部连接。尝试先连接所有表,然后再过滤。我将答案发布在下面。

query_user_role = User.query.join(roles_users).join(Role).
filter((roles_users.c.user_id == User.id) & (roles_users.c.role_id == Role.id)).all()

查询关联表对象时不要忘记输入“c”。没有它,它就无法工作。

还有一件事,不要忘记设置 backref lazy = 'joined'

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 SQLAlchemy 中查询关联表? 的相关文章

  • DataFrame 中的字符串,但 dtype 是对象

    为什么 Pandas 告诉我我有对象 尽管所选列中的每个项目都是一个字符串 即使在显式转换之后也是如此 这是我的数据框
  • 无法安装时间模块

    我试过了pip install time and sudo H pip install time 但我不断收到错误 找不到满足要求时间的版本 从 版本 未找到时间匹配的发行版 我正在 PyCharm 中工作 但真正没有意义的是我可以在 Py
  • 想要从字符格式转换为带小数的数字格式

    想要将字符格式 00001000000 转换为10000 00 请帮我 我已经尝试过 select to number 00012300 9999999999 99 nls numeric characters from dual 这个脚本
  • 远程控制或脚本打开 Office 从 Python 编辑 Word 文档

    我想 最好在 Windows 上 在特定文档上启动 Open Office 搜索固定字符串并将其替换为我的程序选择的另一个字符串 我该如何从外部 Python 程序中做到这一点 OLE 什么 原生 Python 脚本解决方案 The doc
  • 如何在 openpyxl 中设置或更改表格的默认高度

    我想通过openpyxl更改表格高度 并且我希望首先默认一个更大的高度值 然后我可以设置自动换行以使我的表格更漂亮 但我不知道如何更改默认高度 唯一的到目前为止 我知道更改表格高度的方法是设置 row dimension idx heigh
  • 基于 True/False 值的 Python 优雅赋值

    我想根据三个布尔值中的值设置一个变量 最直接的方法是 if 语句后跟一系列 elif if a and b and c name first elif a and b and not c name second elif a and not
  • 获取MySql中重复行的列表

    我有一张这样的桌子 ID nachname vorname 1 john doe 2 john doe 3 jim doe 4 Michael Knight 我需要一个查询 该查询将从具有相同 nachname 和 vorname 的记录
  • 使用 Python 抓取维基百科数据

    我正在尝试从以下内容中检索 3 列 NFL 球队 球员姓名 大学球队 维基百科页面 http en wikipedia org wiki 2008 NFL draft 我是 python 新手 一直在尝试使用 beautifulsoup 来
  • 如何将同步函数包装在异步协程中?

    我在用着aiohttp https github com aio libs aiohttp构建一个 API 服务器 将 TCP 请求发送到单独的服务器 发送 TCP 请求的模块是同步的 对于我来说是一个黑匣子 所以我的问题是这些请求阻塞了整
  • Pandas,按最大返回值进行分组 AssertionError:

    熊猫有问题 我想听听你的意见 我有这个数据框 我需要在其中获取最大值 代码就在下面 df stack pd DataFrame 1 0 2016 0 NonResidential Hotel 98101 0 DOWNTOWN 47 6122
  • 使用外部硬盘写入和存储 mysql 数据库

    我已经设置了 mysql 数据库在我的 Mac 上使用 java 和 eclipse 运行 它运行得很好 但现在我将生成大约 43 亿行数据 这将占用大约 64GB 的数据 我存储了大量的密钥和加密值 我有一个 1TB 外部我想用作存储位置
  • 如何在python中递归复制目录并覆盖全部?

    我正在尝试复制 home myUser dir1 及其所有内容 及其内容等 home myuser dir2 在Python中 此外 我希望副本覆盖中的所有内容dir2 It looks like distutils dir util co
  • Python time.sleep - 永不醒来

    我认为这将是那些简单的问题之一 但它让我感到困惑 停止媒体 我是对的 找到了解决方案 查看答案 我正在使用 Python 的单元测试框架来测试多线程应用程序 很好而且很直接 我有 5 个左右的工作线程监视一个公共队列 以及一个为它们制作工作
  • 将参数传递给 __enter__

    刚刚学习 with 语句尤其是这篇文章 http effbot org zone python with statement htm 问题是 我可以传递一个参数给 enter 我有这样的代码 class clippy runner def
  • 从 Apache 运行 python 脚本的最简单方法

    我花了很长时间试图弄清楚这一点 我基本上正在尝试开发一个网站 当用户单击特定按钮时 我必须在其中执行 python 脚本 在研究了 Stack Overflow 和 Google 之后 我需要配置 Apache 以便能够运行 CGI 脚本
  • PermanentTaskFailure:“模块”对象没有属性“迁移”

    我在 google appengine 上使用 Nick Johnson 的批量更新库 http blog notdot net 2010 03 Announcing a robust datastore bulk update utili
  • 本地设置的 Cython 编译器指令是否影响一个或所有函数?

    我正在努力使用 Cython 加速一些 Python Numpy 代码 并且对 本地 设置 如定义的here http docs cython org en latest src reference compilation html在文档中
  • 在 python 查询参数中使用 %20 而不是 + 作为空格

    我使用 python requests 编写了以下 python 脚本 http requests readthedocs org en latest http requests readthedocs org en latest impo
  • Python列表对象属性“append”是只读的

    正如标题所说 在Python中 我试图做到这一点 以便当有人输入一个选择 在本例中为Choice13 时 它会从密码列表中删除旧密码并添加新密码 passwords mrjoebblock mrjoefblock mrjoegblock m
  • Melt() 函数复制数据集

    我有一个这样的表 id name doggo floofer puppo pupper 1 rowa NaN NaN NaN NaN 2 ray NaN NaN NaN NaN 3 emma NaN NaN NaN pupper 4 sop

随机推荐

  • 将 JSON 编码的 PHP 数组解析为 JavaScript JSON.parse() 时的 PHP 或 JavaScript 问题

    我目前正在为我的工作场所制作一个 Web 应用程序 它一次性从 SQL 表中下载大约 40 000 行数据 将数据放入嵌套的 PHP 数组中 然后尝试回显 JSON 编码的数组 其中 JavaScript 变量应该捕获内容 如果我尝试将数据
  • 在repz cmpsb之后,汇编指令'seta'和'setb'做什么?

    我无法理解以下装配线的作用 0x401810 repz cmps BYTE PTR ds rsi BYTE PTR es rdi 0x401812 seta dl 0x401815 setb al 我明白调试后 第一条指令比较寄存器中的字节
  • 为什么 Visual Studio 找不到我的 DLL? [复制]

    这个问题在这里已经有答案了 在 Visual Studio 2010 中 在VC Directories gt Executable Directories 我已经指定了路径glew32d dll 但是 当我运行可执行文件时 它仍然抱怨 另
  • NodeJS Redis 客户端返回错误值

    我正在使用 NodeJS Redis 客户端 Redis节点 https github com mranney node redis并调用 SISMEMBER Redis 命令 但是 当我调用该命令时 无论该值是否是该集合的成员 它总是返回
  • Spring Boot REST API 的指标收集

    我正在尝试收集我的 Spring Boot 2 1 0 RELEASE 应用程序的指标 具体来说我想知道 调用各个 REST 端点的次数 每个端点处理请求所花费的时间 我的请求被处理 出错的平均速率 执行器 actuator metrics
  • 测量缠绕的绳子

    我正在尝试创建一个控件 它基本上允许我在彼此下面绘制不同的字符串 但是 字符串的宽度不能大于控件的宽度 为了解决这个问题 我正在考虑将 RectangleF 对象传递给 Graphics DrawString 方法 这将包装比传递的矩形宽度
  • array_walk_recursive 与数组?

    我有一个菜单数组 它是一个多维数组 我想对每个项目做一些事情 所以我尝试了 array walk recursive 这是菜单 menu array array name gt a url gt b array name gt c url
  • X 没有实现 Y(...方法有一个指针接收器)

    已经有几个关于此的问答 X 没有实现 Y 方法有一个指针接收器 的事情 但对我来说 他们似乎在谈论不同的事情 并不适用于我的具体情况 因此 我没有将问题变得非常具体 而是将其变得广泛和抽象 似乎有几种不同的情况可能会导致此错误发生 有人可以
  • 从 Chrome 打包应用程序读取和写入本地 sqlite 数据库

    是否可以从 chrome 打包应用程序读取和写入本地 sqlite 文件 我目前已经读取并写入了一个 json 文件 其中包含本地存储在硬盘上的应用程序数据 但我也希望能够使用 sqlite 数据库来执行此操作 我需要它在本地而不是在驱动器
  • 从概念上讲,重玩在游戏中是如何运作的?

    我有点好奇如何在游戏中实现重播 最初 我认为游戏中只会有一个包含每个玩家 人工智能操作的命令列表 然后它会 重新玩 游戏并让引擎照常渲染 然而 我查看了 FPS RTS 游戏的重播 经过仔细检查 甚至像粒子和图形 声音故障之类的东西都是一致
  • 如何编辑嵌入不和谐中的图像?

    是否可以更改嵌入内的图像 我正在尝试重新创建一个我在 Reddit 上看到的 蚀刻草图 机器人 并且想知道它是如何完成的 到目前为止 这是我尝试过的 这是在制作图像的函数内部 code that draws the etch a sketc
  • Next.js 路由器对某些页面上的浏览器后退按钮没有反应

    当浏览器的后退按钮打开时 我遇到了难以调查的错误https gart gallery 如果你去https gart gallery artworks 然后是任何艺术品 例如https gart gallery artworks my pla
  • 使用 jquery 创建会话?

    是否可以使用 jquery 或 javascript 创建会话变量 或者我是否必须使用 ajax 来调用执行此操作的 php 您需要使用服务器请求 Javascript仅在客户端运行 会话数据存储在服务器上 example of passi
  • 将 CSV 文件转换为 TF 记录

    我已经运行我的脚本超过 5 个小时了 我有 258 个 CSV 文件想要转换为 TF Records 我编写了以下脚本 正如我所说 我已经运行它超过 5 个小时了 import argparse import os import sys i
  • JAX-WS 返回复杂对象?

    我对 Java Web 服务还很陌生 但我在任何地方都找不到很好的解释 我在 NetBeans 中有 2 个 Java Web 项目 一种作为 Web 服务 另一种作为该 Web 服务的客户端 我还创建了自己的类 名为 Person 其中包
  • 如何将 updateview 与foreignkey/onetoonefield一起使用

    class ModTool models Model issue models OneToOneField Issue priority models CharField max length 1 choices PRIORITY blan
  • 使用 formControlName 作为反应式形式的自定义输入组件

    有一个自定义输入组件 它以带有验证的反应形式使用 Component moduleId module id toString selector custom select templateUrl custom select componen
  • 根据另一个文件中的顺序对一个文件中的行进行排序

    给定一个文件1 13 a b c d 5 f a c d 7 d c g a 14 a v s d 和一个文件2 7 x 5 c 14 a 13 i 我想考虑 file2 中第一列的相同顺序对 file1 进行排序 以便输出应为 7 d c
  • Matlab mex“缺少依赖共享库”

    我在 Matlab 2017a 中创建了几个 mex 文件 当我使用 Visual Studio C 2017 编译它们时 它们在我的计算机上运行良好 但是 当我尝试在另一台计算机上使用它们时 我收到一条错误消息 Error using m
  • 如何在 SQLAlchemy 中查询关联表?

    我正在尝试将 SQL 查询转换为 SQLAlchemy 查询 以供用户在 get API 内使用 问题是我无法从关联表中查询任何内容 我确信我不知道该方法 ORM roles users db Table roles users db Co