使用连接表进行过滤

2024-02-15

我试图提高一些查询性能,但生成的查询看起来并不像我期望的那样。

使用以下方式检索结果:

query = session.query(SomeModel).
        options(joinedload_all('foo.bar')).
        options(joinedload_all('foo.baz')).
        options(joinedload('quux.other'))

我想要做的是过滤通过“first”连接的表,但这种方式不起作用:

query = query.filter(FooModel.address == '1.2.3.4')

它会产生一个附加到查询的子句:

WHERE foos.address = '1.2.3.4'

这不能以正确的方式进行过滤,因为生成的联接会附加表foos_1 and foos_2。如果我手动尝试该查询,但将过滤子句更改为:

WHERE foos_1.address = '1.2.3.4' AND foos_2.address = '1.2.3.4'

效果很好。问题当然是 - 我如何使用 sqlalchemy 本身来实现这一点?


如果你想过滤连接,你可以使用 join():

session.query(SomeModel).join(SomeModel.foos).filter(Foo.something=='bar')

joinload() 和 joinload_all() 仅用作一次性加载相关集合的一种方法,不用于过滤/排序!。请阅读:

http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#joined-load http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#joined-load- 关于“joinedload() 不能替代 join()”的注释,以及:

http://docs.sqlalchemy.org/en/latest/orm/loading.html#the-zen-of-eager-loading http://docs.sqlalchemy.org/en/latest/orm/loading.html#the-zen-of-eager-loading

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

使用连接表进行过滤 的相关文章

随机推荐

  • C 或 C++ 中 >>= 的含义是什么?

    的含义是什么 gt gt C 或 C 中的符号 它有什么特别的名字吗 我有这个for循环一些 CUDA 代码 如下所示 for int offset blockDim x offset gt 0 offset gt gt 1 Some co
  • Numpy 将布尔数组的字符串表示形式转换为布尔数组

    是否有一种原生的 numpy 方法来转换布尔值的字符串表示数组 例如 True False True False 对于我可以用于屏蔽 索引的实际布尔数组 我可以做一个 for 循环来遍历并重建数组 但对于大型数组来说 这很慢 您应该能够进行
  • 验证插件未验证所有字段

    我正在使用 jQuery 验证插件进行表单验证 它只是检查第一个字段 如果第一个字段验证为真 则正在提交表单 它不验证其余字段 我正在使用引导程序3 0
  • 输入语句块时会创建新的堆栈帧吗? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 语言中 大括号充当堆栈框架吗 https stackoverflow com questions 2759371 in c do braces act as a stack frame int
  • Selenium:如何点击javascript按钮

    我必须编写一些用于自动测试的脚本 以检查使用 flex amf 技术构建的 Web 应用程序的加载时间 测试将包括打开 IE 浏览器 浏览多个选项卡 并测量从单击最后一个选项卡加载页面内容到关闭浏览器的时间 我使用 Selenium Web
  • RavenDB 索引错误

    我刚刚开始使用 Raven 我创建的索引始终无法索引任何内容 我在 Raven 服务器上发现了很多如下所示的错误 Index HomeBlurb IncludeTotalCosts Error Cannot implicitly conve
  • VB.NET 尝试将通用 Invoke 方法修改为通用 BeginInvoke 方法,出现意外问题

    VB NET 2010 NET 4 Hello 我一直在使用一种非常灵活的通用调用方法来从后台线程更新 UI 我忘记了从哪里复制它 从 C 将其转换为 VB NET 但它是 Public Sub InvokeControl Of T As
  • Reflection.Emit 和泛型类型

    我在用Reflection Emit我想创建一个与 C 中定义的以下类型等效的类型 class A public Tuple
  • 如何在 Mercurial 中添加远程存储库?

    我通过以下方式使用 Git 存储库 我在不同的生产机器上有主存储库和几个遥控器 我将生产代码推送到远程并重新启动服务以使更改生效 我即将从 Git 切换到 Mercurial 我想提前知道如何实现类似的目标 您将条目添加到 paths 本地
  • 优雅地从 has_many 中选择属性:通过 Rails 中的连接模型

    我想知道从 has many 中的连接模型选择属性的最简单 最优雅的方法是什么 通过关联 假设我们有具有以下 Item 类的 Items Catalogs 和 CatalogItems class Item lt ActiveRecord
  • 抽象工厂模式是否有“更多”的现实世界示例? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前正在研究OPP的设计模式 只是为了给您一些背景知识 这不是我第一次遇到这些模式 我已经编程了一段时
  • 在 Rails 中动态添加字段,无需嵌套属性

    我正处于创建应用程序的早期阶段 只是放置一些基本代码 这是当前的代码 应用程序 视图 卡片 front html erb routes controller cards do get front
  • 增加 AWS Elastic Beanstalk 上 Nginx conf 中的 client_max_body_size

    我遇到了 413请求实体太大 将大于 10MB 的文件发布到在 AWS Elastic Beanstalk 上运行的 API 时出现错误 我已经做了相当多的研究 并且相信我需要提高客户端最大主体尺寸对于 Nginx 但是我似乎找不到任何有关
  • Ant属性可以解析其他属性吗?

    Ant 属性可以通过属性文件设置 从属性文件解析其他属性吗 例如 我可以这样做
  • 如何在 Chrome 中调试 HTTP POST?

    我想查看在 Chrome 中发送的 HTTP POST 数据 数据现在已在内存中 我可以重新提交表单 我知道如果我重新提交服务器会抛出错误 我可以查看 Chrome 内存中的数据吗 转到 Chrome 开发者工具 Chrome 菜单 gt
  • 如何通过函数获取ng-style的多css规则?

    我需要将多 css 规则应用于角度表单模板中的 html 标签 div class form control data objectStyle title div 控制器中的 getStyle 函数 scope getStyle funct
  • 在php中添加两个数字并保留前导零

    我需要在 php 中添加数字而不更改数字格式 如下所示 a 001 b 5 c a b 现在结果就像 6 但如果我需要 006 a是 01 那么结果应该是 06 Thanks 从技术上来说 a and b在你的例子中是strings htt
  • Go:“fmt”包缩写的含义

    什么是 fmt Golang 中的缩写是什么意思 fmt 是一个提供 I O 功能的包 例如Println 您可以使用以下命令导入它import fmt 我认为 f 表示正在格式化 但找不到正确的答案 fmt是格式的缩写 来自文档 http
  • 如何使用 fetch() 从请求中获取响应的内容长度

    我返回时遇到错误response json 当我使用空响应主体执行请求时 因此我尝试在存在空主体时仅返回一个空对象 我想要的方法是检查Content Length然而 响应的标题response headers get Content Le
  • 使用连接表进行过滤

    我试图提高一些查询性能 但生成的查询看起来并不像我期望的那样 使用以下方式检索结果 query session query SomeModel options joinedload all foo bar options joinedloa