编程本身就是对数据的处理。ORM是学习开发绕不过去的坎儿,今天我们就来聊聊在python的orm框架中,面对Pony和Sqlalchemy该如何选择。我最早学习的框架是django,那时候还是1.x系列主流。感觉django和它的orm的设计理念非常nice,但问题也很明显:深度绑定,单独使用很难。后来逐渐接触到其他的orm框架,比如 peewee,pony, sqlalchemy.其中,能够提供和django同样丰富功能的目前看来只有sqlalchemy,几乎你能想到的它都准备好了或者只需要简单的封装就能实现。django的orm和sqlalchemy都是相对重型的orm框架。你可以把sqlalchemy看作能独立使用django的orm也可以。peewee和pony都是相对轻型的ORM框架。

我自己的orm的学习路线是 django-orm–>sqlalchemy --> peewee–> pony–>pony + sqlalchemy.目前是sqlalchemy和pony并用,根据开发场景做选择。这中间四次转向学习的动机如下:

从django-rom到sqlalchemy: 寻找一款无需和django绑定的django-orm的替代品。

从sqlalchemy 到 peewee : sqlalchemy 太繁琐了。想少敲一些代码。我需要一款sqlalchemy的轻量化替代品。

从peewee到pony: peewee的设计有一些我不喜欢的地方,特别是在复杂的关系表上的。而且我厌倦了无穷尽的重复学习。我需要一款学习成本低轻量级ORM框架。

pony + sqlalchemy 双持: 相对sqlalchemy 的传统设计思维,pony里面太多黑魔法了,在嵌入复杂异步框架,打包编译和跨语言调用上容易出现兼容性问题。因此,在这些场景下,还是需要sqlalchemy 这个老大哥出来坐镇。

四款orm我只有在pony和sqlchemy上面比较有经验,而前者比后者大概又多了5-6年的生产经验。所以我现在只能拿pony和sqlchemy做做比较

  1. 学习成本

pony的优势非常明显,需要的学习时间一般不到 sqlchemy 的十分之一,很多python方面有经验的人,可以在几个小时内完全熟练的使用。可以说目前能在生产环境大规模使用的orm里,pony是学习成本最低的框架。

  1. 功能

在提供能的功能方面,2者相当,sqlchemy以微弱的优势领先,虽然 pony 功能比 sqlchemy 少,但某些功能的裁剪其实是刻意为之,比如pony没有专门的批量修改的函数。你需要用其他的方法(比如直接调用sql)来实现。按照设计者的说法是:如果你需要频繁的批量的修改和删除操作,考虑一下你的数据模型设计上出了什么问题吧…不过也有持反对意见的,毕竟pony现在不再是商业化的pony,而是一个开源的产品,需要听取社区的意见。

3.性能

理论上orm的性能和3个东西有关:

驱动的性能

orm的对sql语句的生成和优化

使用者的技术

对于第一点,大家都一样,使用的驱动直接决定了性能。

对于第二点,大家几乎都一样,毕竟都是成熟的产品,说到底都是sql语句的生成和执行。玩不出来什么花头。

第三点才是关键。你的水平如何,直接决定了最终表现出来的性能。

写在结束

如果是新手,我会建议以pony开始。学习成本低,挫败感少,几乎不用学习新语法。

如果有一定经验且想提高开发效率的web开发者, 你可以试试pony,或许会让你感到惊喜

如果你是一个qt开发者,我建议你选择 sqlchemy , 这样你会在打包成exe文件时少遇到很多问题。