什么是 Pony ORM?¶
Pony 是一款先进的对象关系映射器。ORM 允许开发人员以对象的形式处理数据库内容。关系型数据库包含存储在表中的行。但是,在用高级面向对象语言编写程序时,当从数据库检索到的数据可以以对象的形式访问时,会方便得多。Pony ORM 是一个用于 Python 语言的库,允许您方便地处理存储在关系型数据库中行中的对象。
Python 中还实现了其他流行的映射器,例如 Django 和 SQLAlchemy,但我们认为 Pony 有一些独特的优势
编写查询的极其方便的语法
自动查询优化
解决 N+1 问题的优雅方案
在线数据库模式编辑器https://editor.ponyorm.com
与 Django 相比,Pony 提供
IdentityMap 模式
自动事务管理
自动缓存查询和对象
完全支持复合键
能够轻松使用 LEFT JOIN、HAVING 和 SQL 的其他功能编写查询
Pony 的一个有趣功能是它允许使用生成器表达式或 lambda 函数以纯 Python 与数据库交互,这些表达式或函数随后被转换为 SQL。熟悉 Python 的开发人员可以轻松编写此类查询,即使他们不是数据库专家。以下是一个使用生成器表达式语法的查询示例
select(c for c in Customer if sum(c.orders.total_price) > 1000)
以下是使用 lambda 函数编写的相同查询
Customer.select(lambda c: sum(c.orders.total_price) > 1000)
在此查询中,我们检索所有购买总额超过 1000 的客户。对数据库的查询以 Python 生成器表达式的形式描述,并作为参数传递给 select()
函数。Pony 不会执行此生成器,而是将其转换为 SQL,然后发送到数据库。使用这种方法,任何开发人员都可以编写数据库查询,而无需成为 SQL 专家。
Customer
是一个实体类,它最初是在应用程序创建时描述的,并链接到数据库中的一个表。
并非所有对象关系映射器都提供如此方便的查询语法。除了易用性之外,Pony 还能确保高效地处理数据。查询被转换为快速高效执行的 SQL。根据 DBMS,生成的 SQL 语法可能会有所不同,以便使用所选数据库的功能。在 Python 中编写的查询代码将看起来相同,无论 DBMS 如何,这确保了应用程序的可移植性。
使用 Pony,任何开发人员都可以编写复杂且有效的查询,即使他们不是 SQL 专家。同时,Pony 不会与 SQL “作斗争”——如果开发人员需要用原始 SQL 编写查询,例如调用存储过程,他们可以使用 Pony 轻松做到这一点。Pony ORM 的主要目标是简化 Web 应用程序开发流程。
从 0.7 版本开始,Pony ORM 在 Apache 许可证 2.0 版下发布。
PonyORM 社区¶
如果您有任何问题,请在 Stack Overflow 上发布。在我们的社区 Telegram 群组 中与 PonyORM 团队会面,与社区成员聊天,并获得问题的解答。加入我们的新闻通讯,网址为 ponyorm.com。在 Twitter 上联系我们,或通过电子邮件联系 Pony ORM 团队:team (at) ponyorm.com。