【问题标题】:SQLAlchemy (ORM) vs. raw SQL queries [duplicate]SQLAlchemy(ORM)与原始 SQL 查询 [重复]
【发布时间】:2017-04-03 10:43:46
【问题描述】:

上个月我致力于研究 Flask,这是一个用于构建 Web 应用程序的 Python 框架。

根据我在网上找到的不同教程,我发现了 SQLAlchemy。

老实说,我觉得它很复杂而且不是很有用,因为我对 SQL 语言有很好的了解。

我想了解的是,使用 ORM(如我所缺少的 SQLAlchemy)是否有任何重大收获(可能是使用纯 sql 时的一些我不知道的安全问题?)。

另外,如果你能告诉我什么是处理纯 SQL 查询的最佳 python 库,我将不胜感激。

【问题讨论】:

  • 这是见仁见智的问题。我支持纯 SQL,但这不应该让任何人感到惊讶。
  • @MoinuddinQuadri 非常感谢您!我今天看到了这篇文章,但自从它 7 岁以来,我认为情况可能已经发生了变化。

标签: python sql orm sqlalchemy


【解决方案1】:

有很多。我看到使用 ORM 代替原始 SQL 查询的最大优势是:

  1. 稳健性:您不必担心在为不同的数据库源编写 SQL 查询时可能会出现语法错误。事实上,您不需要知道所有数据库源的语法。相同的 ORM 查询适用于所有人。无论是 MySQL 等基于 SQL 的引擎,还是 MongoDB 等基于 NoSQL 的引擎
  2. 可扩展性:随着业务需求或您正在处理的数据种类/数量的变化。更改数据库引擎是很常见的。您不必担心查询中的中断,因为 ORM 会处理它。唯一的条件是您的 ORM 应该支持该数据源。
  3. 安全性:您不必担心由于SQL Injections 等导致的安全漏洞,因为 ORM 已经对它们起到了保护作用
  4. 信任:世界各地有大量聪明的人致力于创建 ORM,以处理他们随着时间的推移所面临的场景和问题。我,作为一个人,可能会错过其中的许多方面。因此,使用 ORM 不太容易出现我们可能面临的意外问题。 (这并不意味着 ORM 是完美的,但它们不太容易出错)
  5. 时间:使用 ORM,您可以获得对大量开源库的支持。例如对于数据迁移、检查数据的门户网站、数据序列化器等。因此,您可以节省时间用于更重要的事情。

尽管它们也有一些副作用:

  1. 速度:ORM 速度较慢,因为它们充当代码和查询执行之间的中间件。事实上,ORM 会在内部创建相同的原始查询来获得所需的结果,
  2. 范围:ORM 可能会限制您的实施范围。正如我所提到的,它们充当中间件。您的数据库引擎可能支持某些功能,但在 ORM 中没有实现。但在这种情况下,您始终可以选择编写原始 SQL 查询来获得所需的结果。

由于我提到的优点,我喜欢 ORM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-14
    • 2018-05-15
    • 1970-01-01
    • 2019-08-05
    • 2015-01-31
    • 2020-10-21
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多