SQLAlchemy 1.4.7 发布,Python ORM 框架

来源: OSCHINA
编辑: Alias_Travis
2021-04-12

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

SQLAlchemy 1.4.7 版本的更新内容如下:

orm

  • [bug] [regression]

    修正了 subqueryload() 加载器策略在 subqueryload 的 "路径"超过一级深度时,无法正确容纳子选项的问题,例如列上的 defer() 选项;

  • [bug] [regression]

    修正了 dogpile.caching 示例所依赖的 merge_frozen_result() 函数未被包含在测试中,并且由于内部参数不正确而开始失败的回归问题;

  • [bug] [regression]

    修正了一个关键的回归问题,即当刷新发生时,在没有现有事务的情况下,Session 可能无法 "自动开始"一个新的事务,从而隐含地将 Session 置于传统的自动提交模式,从而提交事务。现在,Session 除了修复刷新问题外,还有一个检查,可以防止这种情况发生;

  • [bug] [regression]

    修正了 ORM 编译方案假设混合属性的函数名与属性名相同的回归问题,当它试图确定结果元组中每个元素的正确名称时,会引发 AttributeError。类似的问题在 1.3 中也存在,但只影响元组行的名称。这里的修复增加了一项检查,即在分配这个名称之前,检查混合体的函数名是否确实存在于类或其超类的 dict 中;否则,混合体被认为是 "未命名的",ORM 结果元组将使用底层表达式的命名方案。

  • [bug] [regression]

    修正了作为 #1763 的一部分添加的新特性引起的关键回归,eager loaders 在未到期操作上被调用。新特性利用 "immediateload" eager loaders 策略来替代集合加载策略,与其他"后加载"策略不同的是,该策略不适应相互依赖关系之间的递归调用,导致递归溢出错误。

sql

  • [bug] [regression]

    增强了用于 ColumnOperators.in_() 操作的"扩展"功能,如果左侧没有设置任何显式类型,则从右侧元素列表中推断表达式的类型。这使得表达式可以支持字符串化等功能。在 1.3 中,ColumnOperators.in_() 表达式并没有自动使用 "expansion",所以从这个意义上来说,这个变化修复了一个行为上的回归。

  • [bug]

    修正了"stringify"编译器,以支持"多行" INSERT 语句的基本字符串化,即在 VALUES 关键字后有多个元组的语句。

schema

  • [bug] [regression]

    修正了在 Connection.execute_options.schema_translate_map 字典中使用包含特殊字符(如大括号)的标记时无法正确替换的问题。方括号字符 [] 的使用现在被明确禁止,因为在当前的实现中,这些字符被用作定界符。

mypy

  • [bug]

    修正了 Mypy 插件中的问题,即插件没有为不直接从 TypeEngine 下传的子类的列推断正确的类型,特别是 TypeDecorator 和 UserDefinedType 的类型。

misc

  • [change] [tests]

    在 DefaultDialect 中添加了一个名为 supports_schema 的新标志;当为第三方 dialects 运行测试套件时,第三方 dialects 可以将该标志设置为 True,以启用 SQLAlchemy 的模式级测试。

更多详情可查看:https://docs.sqlalchemy.org/en/14/changelog/changelog_14.html#change-1.4.7

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