SQLAlchemy(ORM)与原始SQL查询

a.c*_*sta 14 python sql orm sqlalchemy

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

按照我在网上找到的不同教程,我发现了SQLAlchemy.

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

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

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

Moi*_*dri 20

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

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

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

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

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