SQLAlchemy 1.4.0 发布,Python ORM 框架

来源: OSCHINA
编辑: Alias_Travis
2021-03-17

SQLAlchemy 是 Python SQL 工具箱和对象关系映射器,它为应用程序开发人员提供了 SQL 的全部功能和灵活性。它提供了一整套知名的企业级持久性模式,旨在高效、高性能地访问数据库,并被适配为一种简单的 Pythonic 域语言。

在经历了 1.4 系列的三个测试版之后,1.4.0 版本终于正式发布了。它对核心和 ORM 中最突出的 API 进行了重大的重新思考,对内部结构进行了大量的修改,并提供了大量重要的新特性和功能。

SQLAlchemy 1.4 确立了自己作为 SQLAlchemy 2.0 项目的起点,该项目将完全转移到 Python 3 上,并最终确定 1.4.0 版本中引入的新 API。

SQLAlchemy 1.4.0 最主要的亮点包括:

  • 用于为 Core 和 ORM 生成 SELECT 和其他 SQL 语句的方法现在统一在一个经过修改且功能更强大的 select() 构造上。因此,针对 Core 或 ORM 上下文的 SQL 查询现在可以使用相同的 API 和模式来组成。Session.execute() 和 Connection.execute() 方法已被调整,因此 Core 和 ORM 查询和结果集之间的转换是无缝的,两个系统的行为与彼此的实际情况相似。新的强调明确性和不含糊的一致性,目的是让学习和使用 SQLAlchemy 更加直接,同时也支持新的 Python 范式,如 asyncio 和 PEP-484 类型;
  • 修订后的声明式映射系统为许多新的映射范式提供了支持,包括使用装饰器而不是基类的映射类,对 Python 数据类的明确支持,以及"命令式映射",它是与声明式类注册表集成的经典映射器 mapper() 操作的改进版本;
  • 对 Core 和 ORM 的 SQL 编译进行通用和完全透明的缓存。这取代了之前版本的 "baked 查询缓存"系统,该系统为 ORM 提供了一个可选的 SQL 缓存系统,新的方法是完全透明的,并为 Core 和 ORM 中的绝大多数 DML 和 DQL 语句启用。该系统不仅可以缓存语句的即时 SQL 字符串,还可以缓存其相关的结果处理基础架构,该基础架构用于为每个查询生成新的行和 ORM 对象实例;
  • 为 Core 以及 ORM 新修订的模型,它更易于使用,消除了已经变得混乱的传统 API,并以比以前更一致的方式运行。新的模型将是 SQLAlchemy 2.0 中唯一的模型,目前通过将 future=True 标志传递给 create_engine() 函数以及 Session() 构造函数,可以在 1.4 下完全启用;
  • 完全支持 Python asyncio 的 Core 和 ORM。这个新系统利用 greenlet 上下文切换库来调整 SQLAlchemy 的全部内容,使其可以在一个 asyncio 前端使用,同时在 asyncio 事件循环中直接对 asyncio 数据库驱动进行操作,而不需要线程执行器。目前已经包含了对 asyncpg 和 aiomysql 的支持,更多的驱动正在开发中;
  • 大幅提高了 ORM 查询的可扩展性,使用了新的钩子和选项,包括 SessionEvents.do_orm_execute() 钩子和 with_loader_criteria() 函数,可以可靠地、可预测地拦截和修改所有带有附加条件的 ORM 查询;
  • 对 PEP-484 和 Mypy 的原生支持现在正在开发中,其中包括一个全新的 Mypy 插件的 alpha 版本,它与新发布的 stubs 库 sqlalchemy2-stubs 一起运行。

1.4.0 版本的完整变更日志可查看:https://www.sqlalchemy.org/changelog/CHANGES_1_4_0

展开阅读全文
9 收藏
分享
加载中
3 评论
9 收藏
分享
返回顶部
顶部