新闻和更新

SQLAlchemy 1.4.0 发布
永久链接

SQLAlchemy 1.4.0 版本现已发布。

在 1.4 系列的三个 beta 版本之后,1.4.0 版本 终于发布了。这是 SQLAlchemy 至少十年来最广泛的版本,对 Core 和 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 和模式编写。TheSession.execute()Connection.execute()方法已经对齐,以便 Core 和 ORM 查询以及结果集之间的转换是无缝的,两个系统的行为方式尽可能相似。新的重点是明确性和明确的统一性,旨在使学习和使用 SQLAlchemy 更加直接,同时还支持新的 Python 范式,例如 asyncio 和 PEP-484 类型提示。
  • 修订后的 Declarative 映射系统,它为许多新的映射范式提供了支持,包括使用装饰器而不是基类来映射类,显式支持 Pythondataclasses,以及“命令式映射”,它是经典mapper()操作的改进版本,它与 Declarative 类注册表集成。
  • Core 和 ORM 的 SQL 编译的通用且完全透明的缓存。这取代了以前版本的“baked query cache”系统,该系统为 ORM 提供了可选的 SQL 缓存系统,取而代之的是一种新的方法,该方法完全透明,并且为 Core 和 ORM 中绝大多数 DML 和 DQL 语句启用。该系统不仅缓存语句的即时 SQL 字符串,还缓存其相关的结果处理基础设施,该基础设施用于为每个查询生成新行和 ORM 对象实例。
  • CoreEngine以及 ORMSession的全新修订的事务模型,它更易于使用,消除了已变得令人困惑的旧版 API,并且比以前以更一致的方式运行。新的事务模型将是 SQLAlchemy 2.0 中唯一的模型,可以通过将future=True标志传递给create_engine()函数以及Session()构造函数来在 1.4 下完全启用。
  • 完全支持 Pythonasyncio的 Core 和 ORM。这个新系统利用greenlet上下文切换库,使整个 SQLAlchemy 适应在非常薄的asyncio前端后面可用,同时直接针对asyncioasyncio 事件循环中的数据库驱动程序进行操作,而无需线程执行器。目前支持asyncpgaiomysql,更多驱动程序正在开发中。
  • 大大改进了 ORM 查询的可扩展性,使用了新的钩子和选项,包括SessionEvents.do_orm_execute()钩子和with_loader_criteria()函数,它们共同可以可靠且可预测地拦截和修改所有带有附加条件的 ORM 查询;do_orm_execute()本身证明了它的价值,现在它是实现“水平分片”(在多个数据库之间多路复用单个查询)和“dogpile 缓存”(使用缓存的Result对象)示例所需的唯一钩子。
  • 现在正在进行对 PEP-484Mypy 的原生支持,其中包括全新 Mypy 插件的第一个 alpha 版本,该插件与新发布的 stubs 库一起运行sqlalchemy2-stubs.

如果没有数百名贡献者以及我们最近扩大的专业维护团队的帮助,1.4 版本是不可能实现的;我们要对 Federico Caselli、Gord Thompson、Jonathan Vanasco 和 Ramon Williams 表示 衷心感谢,感谢他们在处理数百个问题和努力实现主要新功能方面付出的巨大努力,以及我们经常提供用户支持的贡献者,包括 Alex Grönholm 和 Simon King。

对于从 1.3 迁移的用户,第一站是 1.4 版本新特性 文档,该文档将概述如何开始使用 SQLAlchemy 1.4。

1.4.0 以及所有 beta 版本的完整更新日志位于 更新日志

SQLAlchemy 1.4.0 可在 下载页面 获取。