为什么很多人都喜欢 Django 的 ORM 而不是 SQLAlchemy,是因为简单吗?

关注者
199
被浏览
125,261

11 个回答

先一个字概括:是


Django ORM 的优点

  • 1. 遵循 Active Record 模式,对业务相对来说简单一些的网站来说,对外暴露了简简单单的 OO 操作方式?连 GroupBy 的写法都看不出来 SQL 的痕迹。
  • 2. 对于没上手 SQL 的人来说,照着文档撸代码, 稍微懂一点点SQL, 谈笑间简直就是 Python 一波速推流,简单而暴力。

缺点

  • 1. 没有 Unit Of Work, 这就导致了你需要大量的依据情况来一个一个object的save
  • 2. 没有 Identity Map, 这就导致了会产生很多duplicated 的sql语句 如果你做跨三个表的查询的时候,这个现象就特别明显. 通过 django debug tools 就可以看出来, 当然, 通过 select related 和 prefetch related 也能缓解一下. 或者是走local cache 间接的使用 SQLA
  • 3. JOIN 写起来比较固定。最后发现大部分 JOIN 还是要写 RAWSQL


当然, 上面列的django orm的缺点, 其实sqla帮你解决了大部分

SQLAlchemy 是更加复杂的 ORM 框架,遵循 DataMapper,SQLA 实现了 Unit Of Work , IdentityMap , 对于业务复杂的场景来说,有更好的适应性。

但, 虽然说sqla这么多优点吧, 但架不住复杂到 1000多页的使用说明

以及小项目用 Django 真的超级爽.......逃

关于 Python世界里面的 Active Record 和 Data Mapper 可以参考我的文章


目录如下

0x00 前言 : section
0x01 场景 : section
0x02 从原始社会讲起 : section