ORM 可以代表所有可能的 SQL 查询吗?
Posted
技术标签:
【中文标题】ORM 可以代表所有可能的 SQL 查询吗?【英文标题】:Can ORMs represent every possible SQL query? 【发布时间】:2020-07-16 17:37:36 【问题描述】:我目前正试图弄清楚 ORM 有多强大。我编写了非常简单的 Web 应用程序,您只需要简单的 CRUD 查询,并且对我使用的 ORM 非常满意。但是对于复杂的分析查询,我什至没有尝试使用 ORM。很可能是在特定情况下,这只是我的有限知识。但更笼统地说,是否有任何关于任何 ORM 的语句可以/不能代表任何可能的 SQL 查询? ORM 有多强大?
(我最熟悉Python的SQLAlchemy)
请注意:
是的,许多 ORM 支持发送原始 SQL。不过,我不考虑 ORM 的那一部分。我的问题仅针对 ORM 部分。【问题讨论】:
【参考方案1】:这很微妙。 ORM 的重点是将对象映射到关系结构。我使用的 ORM(主要基于 ActiveRecord 模式)在将基本 SQL 构造映射到面向对象的开发语言方面做得非常好,并允许您在应用程序中的对象实例级别进行推理,而不是行、列和连接。正如您所注意到的,这确实加速了 CRUD 开发任务。
理论上,我认为可以将每个 SQL 查询表示为一个 ORM 构造(假设 ORM 支持底层数据库引擎中的所有 SQL 构造)。
但您可能不想这样做。如果您的应用程序管理订单,那么使用 ORM 中的 CRUD 功能非常有用。但是,要在表格布局中编写按销售人员按月显示订单值的报告会涉及大量 ORM 复杂性,但可以用一个相当简单的 SQL 查询来表示。虽然 ORM 可能支持来自底层数据库引擎的每种语言结构,但它可能不会对性能做出任何承诺。
【讨论】:
以上是关于ORM 可以代表所有可能的 SQL 查询吗?的主要内容,如果未能解决你的问题,请参考以下文章