在SQLalchemy中混合使用ORM和显式SQL是不是很糟糕?

时间:2014-01-10 15:47:03

标签: sql orm sqlalchemy

我发现在设置数据库模式和运行简单查询时,我更喜欢使用SQLAlchemy的ORM。但有时对于涉及复杂连接的查询,使用纯SQL和engine.execute更容易,并且(我认为)更易读。

这种做法有什么明显的错误吗?

2 个答案:

答案 0 :(得分:2)

除非软件开发不起作用,否则任何处理软件开发的方法都没有“错误”。几乎所有东西都有权衡。现在,很明显,大多数人都同意的是不良做法(例如使用GOTO,并且仍有一些人会在那里做出论证),但基本上所有事情之后只是意见。而StackOverflow试图远离“意见”(或者至少明确地承认它们)。有一些人会说使用ORM是一种“坏习惯”或“反模式”!

因此,不可能做出一个通用,全面,正确的答案。但是,有一些事情要考虑:

  1. 使用engine.exe的时间比使用ORM花费的时间更多或更少(请记住,如果需要,您可能还需要编写一些代码来帮助将结果转换为您自己的对象模型)。 / LI>
  2. 假设您必须对此查询进行更改,修改原始SQL会比修改ORM等效项花费更多或更少的时间吗?
  3. 基本上,上面的问题相同,但现在考虑你的团队中的其他人是否正在进行更改。也许某人根本不熟悉SQLAlchemy模型。也许这会更好地作为存储过程一起使用?
  4. 您正在编写的软件是否能够在多个数据库上运行?在这种情况下,原始SQL更可能使用可能在其他数据库上中断的数据库方言特定语法。如果需要,这也可能会改变您将来迁移到其他数据库的能力(或使用不同的数据库,如SQLite来运行快速测试)。
  5. 正如您所看到的,一个项目选择一种方式是完全合法的,而另一个项目则选择另一种方式。在同一个项目中使用这两种方法也是合法的。 SQLAlchemy本身使您能够选择如何使用它,利用该选择以最适合您和您的特定情况的方式使用它。

答案 1 :(得分:2)

虽然它没有任何问题,但实际上它可能是某些特定情况下的最佳方式,但总的来说并不鼓励。使用SQLAlchemy的一个要点是它抽象出数据库之间的差异;编写显式SQL可能会不必要地将您绑定到一个数据库。一旦你习惯了它,使用ORM查询就像现在为你编写SQL一样简单。