SQLAlchemy(ORM)与原始SQL查询

时间:2016-11-19 18:24:51

标签: python sql orm sqlalchemy

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

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

老实说,我发现它很复杂,并没有真正有用,因为我对SQL语言有很好的了解。

我想要理解的是,如果使用像SQLAlchemy这样的ORM有任何重大收获,我都不知道(可能在使用我不知道的纯sql时存在一些安全问题?)。

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

1 个答案:

答案 0 :(得分:16)

有很多。我看到使用ORM而不是原始SQL查询的最大优点是:

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

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