Advertisement

Python的ORM选择之Pony还是SQLAlchemy?

阅读量:

程序的本质即是对数据进行操作。

我的ORM学习历程起始于Django-ORM阶段,在这一过程中经历了四次技术转向的驱动因素。随后依次深入学习SQLAlchemy、Peewee以及Pony体系。在这一过程中逐渐掌握了不同框架的特点后,在实际项目中发现最终采用的是Pony与SQLAlchemy的组合方案,并根据具体的开发需求进行技术选型。目前主要采用的是SQLAlchemy与Pony结合使用,并非固定模式而是灵活匹配开发场景。

为了从Django-ORM转向SQLAlchemy,寻找一款不需要与Django绑定的Django-ORM替代方案。

转而采用peewee后发现使用sqlalchemy显得过于繁琐,因此迫切需要一款轻量化版本的工具作为替代

从Peekoo转向Pony:我对Peekoo的设计存在一些不满,尤其是其在关系表设计上存在明显的不足;此外我也对无休止的学习感到厌倦;因此我希望找到一种轻量化且学习成本低的ORM解决方案。

pony + sqlalchemy 双持: 相较于 sqlalchemy 的传统设计理念,在 pony 中融入大量黑魔法技术时,在嵌入复杂的异步框架、打包编译以及跨语言调用等方面容易导致兼容性问题。因此,在这些情况下,仍然依赖于 sqlalchemy 这个资深专家来提供解决方案。

四款ORM中我目前仅限于在Pony和SQLAlchemy上拥有较为丰富的使用经验,并且我发现Pony的人工智能相关技术栈相比SQLAlchemy大约积累了一到两年的更多生产经验。因此,在这两个ORM框架之间进行横向对比分析是我的当前选择。

  1. 学习成本

pony展现出显著的优势,在学习时间方面相较于sqlalchemy仅为其十分之一。对于拥有一定python开发经验的人来说,在短时间内即可熟练掌握 pony 的基本使用方法。实际上,在广泛应用于生产环境中的orm框架中,pony以其独特的设计和高效性能成为当前最为推荐的学习与应用框架之一,并且其学习成本处于行业最低水平。

  1. 功能

在功能提供方面,两者相当程度上相似;虽然Pony在功能实现上稍逊一筹,并且其官方文档中也明确指出这一点(比如pony没有专门针对批量操作设计特定函数),但某些功能的裁剪并非特意设计而是出于特定考量(比如 pony 没有专门针对批量操作设计特定函数)。如果你希望实现类似的功能需求,则需要考虑采用其他方法(比如直接调用SQL)。从开发者角度看,在面对频繁的大规模数据修改与删除操作时(即需要进行大量修改与删除操作),可能有必要重新审视您的数据模型架构是否存在不合理之处。(注:这里指如果您希望进行频繁的大规模修改与删除操作)然而这一观点也存在争议性意见(即持反对意见的人认为 pony 已经不是一个商业化的软件而是开源项目了),因此应当尊重社区反馈。

3.性能

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

复制代码
    驱动的性能
    
    orm的对sql语句的生成和优化
    
    使用者的技术

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

针对第二条内容的主要关注点,则是基于成熟的解决方案进行设计与实现。核心功能通常由生成和执行SQL语句来实现,并且运行效率得到了充分验证。

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

写在结束

如果是新手的话, 我会推荐使用pony作为起点来开始学习. 学习成本不高, 并且挫折感轻度存在, 在大多数情况下基本上不需要掌握新的语法知识.

对于那些有一定经验并且希望提高开发效率的web开发者来说, 试着使用pony可能会让你觉得它非常有趣

对于那些开发qt应用的开发者来说,在打包成exe文件的过程中, sqlchemy框架会比传统方法更高效.

全部评论 (0)

还没有任何评论哟~