SQLAlchemy 2.1 系列的第三个测试版现已发布。
2.1.0b3 版本带来了一系列新功能、性能改进和错误修复。此版本预计将是正式版 2.1.0 发布(2026 年夏末)前的最后一个测试版 。
本次发布的亮点包括:
- ORM 加载性能改进 - 由于 ORM 加载器使用基于位置的访问,无需 Row 接口,因此 ORM 结果行的获取现在以普通元组的形式处理行,而不是构建 Row 对象。此外,还对selectinload和subqueryload 的结果处理进行了优化 。基准测试表明,ORM 实体加载时间提升了 3% 到 16%,具体提升幅度取决于查询结构。
- selectinload omit_join for Many-to-Many - selectinload 加载器策略现在会自动为多对多非自引用关系应用 omit_join 优化,直接从辅助(关联)表中选择,而不是连接回父实体,从而减少了生成的 SELECT 语句中的 JOIN 操作次数。
- SQLite JSONB 类型 - 新增的 JSONB 类型支持 SQLite 的二进制 JSON 存储格式,自 SQLite 3.45.0 版本起提供。值通过 jsonb() / json() SQL 函数进行存储和检索,而 Python 端的行为与 JSON 完全一致。
- selectinload chunksize Parameter - selectinload 新增chunksize参数,允许配置加载关系时每个 IN 子句发送的主键数量,从而使应用程序能够控制超大型结果集的查询大小。
- Delete.using() for Multi-Table DELETE - 新的 Delete.using() 方法允许在后端特定的多表 DELETE 形式中呈现显式的 FROM 表达式,包括 MySQL/MariaDB DELETE .. USING。
- SQL Server 批量反射 - SQL Server 方言现已实现原生多表反射方法,针对每个对象类型向 sys.* 目录视图发出单个批量查询,而非针对每张表进行往返循环,这与 PostgreSQL 和 Oracle 方言已采用的模式一致。
- Session execution_options for Unit of Work Core SQL - 除了 ORM 语句执行外,会话级别的执行选项现在也适用于事务单元操作生成的核心级 SQL。这使得 schema_translate_map 等选项能够全局应用于会话。
SQLAlchemy 2.1 在所有 beta 版本中都包含了 90 多项有据可查的更改。详情可查看 Changelog。
根据命名规则,SQLAlchemy 2.1.0b3 是一个 beta 版本,因此只有在添加`--pre`标志的情况下才能使用 pip 安装。SQLAlchemy 2.1.0b3 的 pypi 链接可在下载页面找到。