SqlAlchemy 2.0 中文文档(六十二)(3)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: SqlAlchemy 2.0 中文文档(六十二)

SqlAlchemy 2.0 中文文档(六十二)(2)https://developer.aliyun.com/article/1560759


1.1.11

发布日期:2017 年 6 月 19 日星期一

orm

  • [orm] [bug]
    修复了子查询急加载中的问题,该问题继续自#2699#3106#3893修复的系列问题,涉及到“子查询”在从连接的继承子类开始,然后对基类的关系进行子查询急加载时包含正确的 FROM 子句,同时查询还包括对子类的条件。之前票证中的修复未考虑到从第一级更深层次加载更多的子查询操作,因此修复进一步泛化。
    参考:#4011

sql

  • [sql] [bug]
    修复了在WithinGroup结构迭代期间可能发生的 AttributeError。
    参考:#4012

postgresql

  • [postgresql] [bug]
    继续处理正确处理 1.1.8  中发布的 PostgreSQL 版本字符串“10devel”的修复,增加了一个正则表达式版本以处理形式为“10beta1”的版本字符串。虽然  PostgreSQL 现在提供更好的方法来获取这些信息,但至少在 1.1.x 中我们仍然坚持使用正则表达式,以最小化与旧版或替代  PostgreSQL 数据库的兼容性风险。
    参考:#4005
  • [postgresql] [bug]
    修复了使用带有排序的字符串类型的ARRAY在 CREATE TABLE 中未能生成正确语法的错误。
    参考:#4006

mysql

  • [mysql] [bug]
    MySQL 5.7 引入了对“SHOW VARIABLES”命令的权限限制;MySQL 方言现在将处理当 SHOW 返回没有行时的情况,特别是对于 SQL_MODE 的初始获取,并将发出警告,提示用户权限应该被修改以允许该行存在。
    参考:#4007

mssql

  • [mssql] [bug]
    修复了在使用 Azure 数据仓库时必须从不同视图获取 SQL Server 事务隔离的错误,现在查询将尝试针对两个视图,如果失败继续,则无条件地引发 NotImplemented,以提供对未来新 SQL Server 版本中任意 API 更改的最佳弹性。
    参考:#3994
  • [mssql] [bug]
    在 SQL Server 方言中添加了一个占位符类型XML,以便包含此类型的反射表可以重新呈现为 CREATE TABLE。该类型没有特殊的往返行为,也不支持当前支持额外的限定参数。
    参考:#3973

oracle

  • [oracle] [bug]
    当使用 cx_Oracle 的版本  6.0b1 或更高版本时,完全删除了 cx_Oracle 的两阶段事务支持。在任何情况下,两阶段功能在 cx_Oracle 5.x  下历史上从未可用过,而 cx_Oracle 6.x 已经删除了此功能依赖的连接级“twophase”标志。
    参考:#3997

orm

  • [orm] [bug]
    修复了子查询预加载的问题,这是继#2699#3106#3893修复的一系列问题的延续,涉及到当从一个连接的继承子类开始,然后对基类的关系进行子查询预加载时,“子查询”包含正确的  FROM 子句,同时查询还包括对子类的条件。之前票证中的修复没有考虑到从第一级更深层次加载更多的 subqueryload  操作,因此修复已进一步泛化。
    参考:#4011

sql

  • [sql] [bug]
    修复了在WithinGroup结构迭代期间可能发生的 AttributeError。
    参考:#4012

postgresql

  • [postgresql] [bug]
    继续修复正确处理  PostgreSQL 版本字符串“10devel”(在 1.1.8  中发布)的问题,增加了一个正则表达式来处理形式为“10beta1”的版本字符串。虽然 PostgreSQL  现在提供了更好的获取此信息的方法,但至少在 1.1.x 中,我们仍然坚持使用正则表达式,以最大程度地减少与旧版或其他 PostgreSQL  数据库的兼容性风险。
    参考:#4005
  • [postgresql] [bug]
    修复了一个 bug,在使用带有排序规则的字符串类型的 ARRAY 时,无法在 CREATE TABLE 中生成正确的语法。
    参考:#4006

mysql

  • [mysql] [bug]
    MySQL 5.7 引入了对“SHOW VARIABLES”命令的权限限制;MySQL 方言现在将处理当 SHOW 不返回任何行时的情况,特别是对于 SQL_MODE 的初始获取,并将发出警告,提示用户权限应该被修改以允许该行存在。
    参考:#4007

mssql

  • [mssql] [bug]
    修复了一个 bug,在使用 Azure 数据仓库时,SQL Server 事务隔离必须从不同的视图中获取,现在查询将尝试针对两个视图执行,如果失败继续提供最佳的弹性,以防止未来新 SQL Server 版本中的任意 API 更改引起的问题。
    参考:#3994
  • [mssql] [bug]
    向 SQL Server 方言添加了一个占位符类型 XML,以便包含此类型的反射表可以重新呈现为 CREATE TABLE。该类型没有特殊的往返行为,也不支持额外的限定参数。
    参考:#3973

oracle

  • [oracle] [bug]
    当使用 cx_Oracle 版本  6.0b1 或更高版本的 DBAPI 时,完全移除了 cx_Oracle 的两阶段事务支持。历史上,在任何情况下,cx_Oracle 5.x  下的两阶段功能从未可用,而 cx_Oracle 6.x 已经移除了此功能所依赖的连接级“twophase”标志。
    参考:#3997

1.1.10

发布日期:2017 年 5 月 19 日星期五

orm

  • [orm] [bug]
    修复了一个 bug,当级联操作(如“delete-orphan”等)无法定位到与继承关系中本身是子类本地关系的对象相关联的对象时,导致操作无法执行。
    参考:#3986

schema

  • [schema] [bug]
    如果创建一个具有不匹配的“本地”和“远程”列数量的ForeignKeyConstraint对象,将引发ArgumentError,否则会导致约束的内部状态不正确。请注意,这也会影响方言的反射过程产生不匹配列集的情况。
    参考:#3949

postgresql

  • [postgresql] [bug]
    为 GRANT、REVOKE 关键字添加了“autocommit”支持。感谢 Jacob Hayes 的拉取请求。

mysql

  • [mysql] [bug]
    移除了对 UTC_TIMESTAMP MySQL 函数的古老且不必要的拦截,这会妨碍使用带参数的函数。
    参考:#3966
  • [mysql] [bug]
    修复了 MySQL 方言中关于在渲染 CREATE TABLE 时与 PARTITION 选项一起渲染表选项的错误。PARTITION 相关选项需要跟随表选项,而以前这种顺序没有得到执行。
    参考:#3961

oracle

  • [oracle] [bug]
    修复了 cx_Oracle 方言中版本字符串解析对于 cx_Oracle 版本 6.0b1 会失败的错误,原因是“b”字符。现在版本字符串解析通过正则表达式而不是简单的拆分。
    参考:#3975

misc

  • [bug] [ext]
    在声明类被垃圾回收并且新的 automap prepare()操作同时进行时,防止将“None”作为类进行测试,非常罕见地会在 gc 后未完全处理的弱引用上命中。
    参考:#3980

orm

  • [orm] [bug]
    修复了一个错误,即“delete-orphan”(以及其他一些)级联操作无法定位到与继承关系中的子类本地关系链接的对象,从而导致操作无法执行。
    参考:#3986

schema

  • [schema] [bug]
    如果创建一个具有不匹配的“本地”和“远程”列数量的ForeignKeyConstraint对象,将引发ArgumentError,否则会导致约束的内部状态不正确。请注意,这也会影响方言的反射过程产生不匹配列集的情况。
    参考:#3949

postgresql

  • [postgresql] [bug]
    为 GRANT、REVOKE 关键字添加了“autocommit”支持。感谢 Jacob Hayes 的 Pull 请求。

MySQL

  • [mysql] [bug]
    移除了对 UTC_TIMESTAMP MySQL 函数的古老且不必要的拦截,这妨碍了将其与参数一起使用。
    参考:#3966
  • [mysql] [bug]
    修复了 MySQL 方言中关于在渲染 CREATE TABLE 时与 PARTITION 选项一起渲染表选项的 bug。PARTITION 相关选项需要跟随表选项,而以前未强制执行此顺序。
    参考:#3961

Oracle

  • [oracle] [bug]
    修复了 cx_Oracle 方言中版本字符串解析在 cx_Oracle 版本 6.0b1 中由于“b”字符而失败的 bug。现在版本字符串解析通过正则表达式而不是简单的分割。
    参考:#3975

杂项

  • [bug] [ext]
    防止在声明类被垃圾回收并发生新的 automap prepare()操作时,测试“None”作为类的情况,非常少见地会在 gc 后仍未完全处理的 weakref 上命中。
    参考:#3980

1.1.9

发布日期:2017 年 4 月 4 日

SQL

  • [sql] [bug]
    由于#3859中发布的 1.1.5 中的回归,根据Variant的“右侧”规则调整表达式的“右侧”评估,以尊重底层类型的“右侧”规则,导致在我们确实希望左侧类型直接传递到右侧,以便将绑定级规则应用于表达式参数时,Variant类型被不适当地丢失。
    参考:#3952
  • [sql] [bug] [postgresql]
    更改了ResultProxy的机制,无条件地延迟“autoclose”步骤,直到Connection完成对象的操作;在 PostgreSQL ON CONFLICT 与 RETURNING 返回零行的情况下,之前不存在的用例中,autoclose 会发生,导致以前无条件发生的 INSERT/UPDATE/DELETE 上的通常自动提交行为失败。
    参考:#3955

杂项

  • [bug] [ext]
    修复了在 1.1.8 版本中由于#3950导致的回归问题,即在“模式类型”或TypeDecorator的情况下对列类型的更深层搜索会在映射中还包含column_property时产生属性错误。
    参考:#3956

sql

  • [sql] [bug]
    修复了在 1.1.5 版本中由于#3859导致的回归问题,即基于Variant的表达式的“右侧”评估调整以遵守基础类型的“右侧”规则,导致Variant类型在我们确实希望左侧类型直接传递到右侧以便将绑定级规则应用于表达式参数时不适当丢失。
    参考:#3952
  • [sql] [bug] [postgresql]
    更改了ResultProxy的机制,无条件地延迟“自动关闭”步骤,直到Connection完成对象处理;在 PostgreSQL ON CONFLICT with RETURNING 返回零行的情况下,之前不存在的用例中,自动关闭会发生,导致以前在 INSERT/UPDATE/DELETE 上无条件发生的自动提交行为失败。
    参考:#3955

misc

  • [bug] [ext]
    修复了在 1.1.8 版本中由于#3950导致的回归问题,即在“模式类型”或TypeDecorator的情况下对列类型的更深层搜索会在映射中还包含column_property时产生属性错误。
    参考:#3956

1.1.8

发布日期:2017 年 3 月 31 日

postgresql

  • [postgresql] [bug]
    增加了对解析 PostgreSQL 版本字符串的支持,例如“PostgreSQL 10devel”。感谢 Sean McCully 的拉取请求。

misc

  • [bug] [ext]
    修复了sqlalchemy.ext.mutable中的错误,其中Mutable.as_mutable()方法不会跟踪使用 TypeEngine.copy() 复制的类型。这在 1.1 版本相比于 1.0 版本更加的退化,因为 TypeDecorator 类现在是 SchemaEventTarget 的子类之一,它表明当 Column 被复制时,类型也应该被复制。在使用混合或抽象类的情况下,这些复制是常见的。
    参考:#3950
  • [bug] [ext]
    新增对绑定参数的支持,例如通常通过Query.params()设置的参数,到Result.count()方法。以前,对参数的支持被省略了。感谢 Pat Deegan 的拉取请求。

postgresql

  • [postgresql] [bug]
    新增对解析 PostgreSQL 版本字符串的支持,例如开发版本的 “PostgreSQL 10devel”。感谢 Sean McCully 的拉取请求。

杂项

  • [bug] [ext]
    修复了sqlalchemy.ext.mutable中的错误,其中Mutable.as_mutable()方法不会跟踪使用 TypeEngine.copy() 复制的类型。这在 1.1 版本相比于 1.0 版本更加的退化,因为 TypeDecorator 类现在是 SchemaEventTarget 的子类之一,它表明当 Column 被复制时,类型也应该被复制。在使用混合或抽象类的情况下,这些复制是常见的。
    参考:#3950
  • [bug] [ext]
    新增对绑定参数的支持,例如通常通过Query.params()设置的参数,到Result.count()方法。以前,对参数的支持被省略了。感谢 Pat Deegan 的拉取请求。

1.1.7

发布日期:2017 年 3 月 27 日

orm

  • [orm] [feature]
    现在可以将aliased()构造传递给Query.select_entity_from()方法。实体将从由aliased()构造表示的可选择项中提取。这允许与Query.select_entity_from()一起使用aliased()的特殊选项,例如aliased.adapt_on_names
    参考:#3933
  • [orm] [bug]
    修复了一个在多线程环境下可能发生的竞争条件,这是通过 #3915 添加的缓存导致的。一个内部的Column对象集合可能会不适当地在别名对象上重新生成,当尝试渲染 SQL 并收集结果时,会混淆一个连接的急切加载器,导致属性错误。现在,在别名对象被缓存和在线程之间共享之前,集合会提前生成并共享。
    参考:#3947

engine

  • [engine] [bug]
    添加了一个异常处理程序,当“autorollback”功能的Connection本身引发异常时,将会警告“cause���异常在 Py2K 上。在 Py3K 中,两个异常自然地由解释器报告为一个发生在处理另一个异常时。这是继续处理回滚失败处理的一系列更改之一,上次访问是在 1.0.12 中的#2696
    参考:#3946

sql

  • [sql] [bug] [postgresql]
    增加了对VariantSchemaType对象相互兼容的支持。也就是说,可以针对像Enum这样的类型创建一个变体,并且创建约束和/或数据库特定类型对象的指令将根据变体的方言映射正确传播。
    参考:#2892
  • [sql] [bug]
    修复了编译器中的一个错误,其中保存点的字符串标识符会被缓存在标识符引用字典中;由于这些标识符是任意的,如果一个Connection有大量未限定数量的保存点使用,以及如果保存点子句构造直接使用了未限定数量的保存点名称,那么可能会发生小内存泄漏。这个内存泄漏不会影响绝大多数情况,因为通常是针对每个事务或固定数量的事务使用渲染保存点名称的Connection,它从“1”开始的简单计数器。
    参考:#3931
  • [sql] [bug]
    修复了新“模式翻译”功能中的错误,其中在与列表达式一起渲染时,翻译的模式名称会被调用为别名名称;仅当源翻译名称为“None”时才会发生。现在,“模式翻译”功能仅对SchemaItemSchemaType子类产生影响,也就是说,对应于数据库中可 DDL 创建的结构的对象。
    参考:#3924

oracle

  • [oracle] [bug]
    修复了 cx_Oracle 的 WITH_UNICODE 模式,这是因为 cx_Oracle 5.3 现在似乎在构建中硬编码了这个标志;使用此模式的内部方法没有使用正确的签名。
    此更改也回溯到:1.0.18
    参考:#3937

orm

  • [orm] [feature]
    aliased() 构造现在可以传递给 Query.select_entity_from() 方法。实体将从由 aliased() 构造表示的可选择对象中拉取。这允许与 Query.select_entity_from() 结合使用 aliased() 的特殊选项,如 aliased.adapt_on_names
    参考:#3933
  • [orm] [bug]
    修复了一个在多线程环境下可能发生的竞争条件,这是由于通过#3915添加的缓存引起的。一个内部的Column对象集合可能会在别名对象上不恰当地重新生成,当尝试渲染 SQL 并收集结果时,这会让一个连接的急切加载器感到困惑,并导致属性错误。现在,在别名对象被缓存和在线程之间共享之前,该集合会被提前生成并共享。
    参考:#3947

引擎

  • [engine] [bug]
    添加了一个异常处理程序,当Connection的“autorollback”功能本身引发异常时,将会对 Py2K 上的“cause”异常发出警告。在 Py3K 中,这两个异常会被解释器自然地报告为一个发生在处理另一个时。这是继续处理回滚失败处理的一系列更改之一,上次访问是在 1.0.12 中的#2696
    参考:#3946

sql

  • [sql] [bug] [postgresql]
    增加了对VariantSchemaType对象相互兼容的支持。也就是说,一个变体可以针对像Enum这样的类型创建,并且创建约束和/或数据库特定类型对象的指令将根据变体的方言映射正确传播。
    参考:#2892
  • [sql] [bug]
    修复了编译器中的一个 bug,即保存点的字符串标识符会被缓存在标识符引用字典中;由于这些标识符是任意的,如果一个单独的Connection使用了无限数量的保存点,或者如果直接使用保存点子句构造了无限数量的保存点名称,就会发生一个小内存泄漏。这个内存泄漏不会影响绝大多数情况,因为通常会在每个事务或每个固定数量的事务基础上使用一个简单计数器从“1”开始渲染保存点名称的Connection,然后将其丢弃。
    参考:#3931
  • [sql] [bug]
    修复了新的“schema translate”功能中的错误,其中在与列表达式一起渲染时,翻译后的模式名称将以别名名称的形式调用;仅在源翻译名称为“None”时才会发生。现在,“schema translate”功能仅在 SchemaItemSchemaType 子类上才生效,即对应于数据库中可 DDL 创建的结构的对象。
    参考:#3924

oracle

  • [oracle] [bug]
    通过发现 cx_Oracle 5.3 现在似乎在构建时强制启用 WITH_UNICODE 模式的一个修复,揭示了 cx_Oracle 的 WITH_UNICODE 模式存在的问题;一个使用此模式的内部方法未使用正确的签名。
    此更改还 向后移植 到:1.0.18
    参考:#3937

1.1.6

发布日期:2017 年 2 月 28 日

orm

  • [orm] [bug]
    解决了加入了 eager 加载器查询构造系统中长时间未解决的性能问题,这些问题是自早期版本以来由于增加的抽象而积累起来的。每次查询使用 ad-hoc AliasedClass 对象产生大量列查找开销,现已用一个缓存方法替换,该方法利用了一小部分在调用之间重复使用的 AliasedClass 对象池。还对一些涉及 eager 连接路径构造的机制进行了优化。与 1.1.5 相比,最坏情况下的 joined loader 场景的端到端查询构造 + 单行提取测试的调用次数减少了约 60%,与 0.8.6 相比减少了约 42%。
    参考:#3915
  • [orm] [bug]
    修复了“eager_defaults”功能中的一个主要效率问题,即对于  ORM 显式插入 NULL 的列值会发出不必要的  SELECT,这些列对应于对象上未设置的属性,但没有指定任何服务器默认值,以及在更新时已过期的属性,但仍然没有设置服务器的  onupdate。由于这些列不是 eager_defaults 尝试使用的 RETURNING 的一部分,因此也不应进行后续选择。
    参考:#3909
  • [orm] [bug]
    修复了两个密切相关的  bug,涉及映射器的 eager_defaults 标志与单表继承结合使用时的情况;一个是 eager defaults 逻辑会在 eager  defaults 获取期间无意中尝试访问映射器的 “exclude_properties” 列表中的列(由单表继承使用)的  bug,另一个是为了获取默认值而对行进行完全加载时,使用错误的继承映射器的 bug。
    参考:#3908
  • [orm] [bug]
    修复了从 0.9.7 引入的 bug,由于 #3106 导致某些形式的多级子查询加载针对别名实体会出现不正确查询的 bug,在最内层子查询中会多出一个不必要的额外 FROM 实体。
    参考:#3893

orm 声明

  • [orm] [declarative] [bug]
    修复了“自动排除”特性的 bug,在声明中确保单个表继承子类的列不会出现在基类的其他派生类属性中,对于从基类进行多级子类化时不会生效的 bug。
    参考:#3895

sql

  • [sql] [bug]
    修复了 DDLEvents.column_reflect() 事件的 bug,在新列的 “default” 值中不允许传递非文本表达式的 bug,例如用于指示通用触发默认或 text() 构造的 FetchedValue 对象。同时在文档中澄清了这一点。
    参考:#3905

postgresql

  • [postgresql] [bug]
    对“IMPORT FOREIGN  SCHEMA”、“REFRESH MATERIALIZED VIEW” PostgreSQL  语句添加了正则表达式,使其在通过连接或引擎调用时自动提交,而无需显式事务。感谢 Frazer McLean 和 Paweł Stiasny  的拉取请求。
    参考:#3804
  • [postgresql] [bug]
    修复了 PostgreSQL 中 ExcludeConstraint 的 bug,在像 Table.tometadata() 这样的操作中,“whereclause” 和 “using” 参数将不会被复制。
    参考:#3900

mysql

  • [mysql] [bug]
    为 MySQL 方言添加了新的 MySQL 8.0 保留字,以便正确引用。感谢 Hanno Schlichting 的拉取请求。

mssql

  • [mssql] [bug]
    在“get_isolation_level”功能中添加了一个版本检查,该功能在首次连接时调用,因此对于 SQL Server 2000 版本,它会跳过,因为在 SQL Server 2005 之前不可用必要的系统视图。
    参考:#3898

杂项

  • [feature] [ext]
    已添加Result.scalar()Result.count()到“烘焙”查询系统中。
    参考:#3896
  • [bug] [ext]
    修复了新的sqlalchemy.ext.indexable扩展中的错误,其中设置一个属性,该属性本身引用另一个属性将失败。
    参考:#3901

orm

  • [orm] [bug]
    解决了在连接的急切加载器查询构造系统中长期存在的性能问题,这些问题自早期版本以来一直积累,这是由于抽象层次的增加所导致的。每次查询都使用临时AliasedClass对象,这会产生大量的列查找开销,现在已经被一个缓存方法取代,该方法利用一小组在连接的急切加载之间重复使用的AliasedClass对象。还对涉及急切连接路径构造的一些机制进行了优化。对于最坏情况下的连接加载器方案的端到端查询构造+单行获取测试的调用次数,与 1.1.5 相比减少了约 60%,与 0.8.6 相比减少了约 42%。
    参考:#3915
  • [orm] [bug]
    修复了“eager_defaults”功能中的一个主要低效性,即当  ORM 明确插入 NULL 对应于对象上未设置但没有指定任何服务器默认值的属性,以及在更新时过期的属性,尽管没有设置服务器 onupdate  时,将发出不必要的 SELECT。由于这些列不是 eager_defaults 尝试使用的 RETURNING 的一部分,它们也不应该被后续  SELECT。
    参考:#3909
  • [orm] [bug]
    修复了两个与映射器急切默认标志相关的紧密相关的错误,与单表继承结合使用;一个是急切默认逻辑会在急切默认获取期间无意中尝试访问映射器的“exclude_properties”列表中的列(由具有单表继承的  Declarative 使用),另一个是为了获取默认值而完全加载行时,会失败地使用不正确的继承映射器。
    参考:#3908
  • [orm] [bug]
    修复了在 0.9.7 中首次引入的 bug,由于 #3106 导致某些形式的多级子查询加载对别名实体的错误查询,在最内层子查询中多了一个不必要的额外 FROM 实体。
    参考:#3893

orm 声明式

  • [orm] [declarative] [bug]
    修复了声明式的 “自动排除” 功能的 bug,该功能确保单个表继承子类的列不会出现在基类的其他派生类的属性中。
    参考:#3895

sql

  • [sql] [bug]
    修复了 DDLEvents.column_reflect() 事件中的一个 bug,该事件不允许将非文本表达式作为新列的 “default” 值传递,例如 FetchedValue 对象表示通用触发默认值或 text() 构造。同时也在文档中对此进行了澄清。
    参考:#3905

postgresql

  • [postgresql] [bug]
    为 “IMPORT FOREIGN  SCHEMA”、“REFRESH MATERIALIZED VIEW” PostgreSQL  语句添加了正则表达式,以便在通过连接或引擎调用时自动提交,而无需显式事务。感谢 Frazer McLean 和 Paweł Stiasny  的拉取请求。
    参考:#3804
  • [postgresql] [bug]
    修复了 PostgreSQL ExcludeConstraint 中的一个 bug,在类似 Table.tometadata() 这样的操作中,“whereclause” 和 “using” 参数不会被复制。
    参考:#3900

mysql

  • [mysql] [bug]
    为 MySQL 8.0 添加了新的保留字到 MySQL 方言以进行正确引用。感谢 Hanno Schlichting 的拉取请求。

mssql

  • [mssql] [bug]
    为 “get_isolation_level” 功能添加了版本检查,该功能在首次连接时调用,以便在 SQL Server 版本 2000 中跳过���因为在 SQL Server 2005 之前不可用必要的系统视图。
    参考:#3898

杂项

  • [feature] [ext]
    为 “baked” 查询系统添加了 Result.scalar()Result.count()
    参考:#3896
  • [bug] [ext]
    修复了新的sqlalchemy.ext.indexable扩展中设置引用另一个属性的属性会失败的错误。
    参考:#3901

1.1.5

发布日期:2017 年 1 月 17 日

orm

  • [orm] [bug]
    修复了涉及多个实体的连接急加载与多态继承同时使用时会抛出“‘NoneType’对象没有‘isa’属性”的错误的错误。此问题是由对#3611的修复引入的。
    此更改也回溯到:1.0.17
    参考:#3884
  • [orm] [bug]
    修复了子查询加载中的错误,其中作为“现有”行遇到的对象,例如在同一查询中从不同路径加载的对象,不会为指定了此加载的未加载属性调用子查询加载程序。此问题与#3431#3811中涉及的与连接加载类似的问题在同一领域。
    参考:#3854
  • [orm] [bug]
    Session.no_autoflush上下文管理器现在确保在“finally”块内重置自动刷新标志,以便如果在块内引发异常,则状态仍然适当地重置。感谢 Emin Arakelian 提供的拉取请求。
  • [orm] [bug]
    修复了单表继承查询标准不会插入到查询中的错误,即如果Bundle构造用作选择标准。
    参考:#3874
  • [orm] [bug]
    修复了与#3177相关的错误,其中Query发出的 UNION 或其他集合操作会将“单继承”标准应用于联合的外部(还引用了错误的可选择项),尽管现在预期这些标准已经存在于内部子查询中。一旦针对Query调用 union()或另一个集合操作,单继承标准就会像Query.from_self()一样被省略。
    参考:#3856

例子

  • [examples] [bug]
    修复了版本历史示例中的两个问题,一个是历史表现在  autoincrement=False 以避免 1.1 版本中关于自动增量的复合主键的新错误;另一个是现在使用  sqlite_autoincrement 标志以确保在 SQLite 上,即使删除了一些行,表的生命周期中也使用唯一标识符。感谢 Carlos  García Montoro 的拉取请求。
    参考:#3872

引擎

  • [engine] [bug]
    Table反射的“extend_existing”选项会导致索引和约束在使用MetaData.reflect()(如 automap 扩展所做的)参数时会重复出现,因为表既在外键路径中反射,也直接反射。在MetaData.reflect()序列中传递一个新的去重集合,以防止以这种方式重复反射。
    参考:#3861

sql

  • [sql] [bug]
    修复了最初在 0.9 版本中引入的 bug,通过#1068,其中  order_by()会根据名称单独对标签名称进行排序,即使标记的表达式与可选择的其他表达式完全不同,隐式或显式地存在。现在,按标签排序的逻辑确保标记的表达式与解析为该名称的表达式相关联,然后按标签名称排序;此外,名称必须在表达式中的其他地方明确解析为实际标签,而不仅仅是列名。这种逻辑与按(textual  name)排序的功能严格分开,后者具有稍微不同的目的。
    参考:#3882
  • [sql] [bug]
    修复了 1.1 版本中import *无法在 sqlalchemy.sql.expression 中工作的回归问题,因为any_all_函数拼写错误。
    参考:#3878
  • [sql] [bug]
    MetaData.reflect()中“无法反射”异常中嵌入的引擎 URL 现在隐藏了密码;此外,TLEngine__repr__现在的行为类似于Engine,隐藏了 URL 密码。感谢 Valery Yundin 的拉取请求。
  • [sql] [bug]
    修复了 Variant 中的问题,其中“right hand coercion”逻辑继承自 TypeDecorator ,会将右侧强制转换为 Variant 本身,而不是默认的 Variant 的默认类型。在 Variant 的情况下,我们希望类型大部分像基本类型一样运行,因此默认的 TypeDecorator 逻辑现在被重写为回退到基础包装类型的逻辑。目前主要与 JSON 相关。
    参考:#3859
  • [sql] [bg]
    修复了一个问题,即当“literal_binds”编译器标志对“multiple values”特性的 Insert 构造未被遵守时,随后的值现在将作为文字呈现。
    参考:#3880

postgresql

  • [postgresql] [bug]
    修复了新的“ON CONFLICT DO UPDATE”功能中的错误,其中 UPDATE 子句的“set”值将不受类型级别处理的影响,通常会处理用户定义的类型级别转换以及方言要求的转换,例如 JSON 数据类型所需的转换。另外,澄清了 set_ 字典中的键应该与列的“键”匹配,如果与列名不同,则应匹配。对于不匹配列名的剩余列名,将发出警告;出于兼容性原因,这些警告将像以前一样发出。
    参考:#3888
  • [postgresql] [bug]
    TIMETIMESTAMP 数据类型现在支持“精度”设置为零;以前零会被忽略。感谢 Ionuț Ciocîrlan 提供的拉取请求。

mysql

  • [mysql] [feature]
    添加了一个新的参数 mysql_prefix,由 Index 构造支持,允许指定 MySQL 特定的前缀,如“FULLTEXT”。感谢 Joseph Schorr 提供的拉取请求。
  • [mysql] [bug]
    MySQL 方言现在在反射的列上有“COMMENT”关键字时不会发出警告,但需要注意的是,评论尚未反映出来;这在未来的发布计划中。感谢 Lele Long 提供的拉取请求。
    参考:#3867

mssql

  • [mssql] [bug]
    修复了 SQL Server 方言尝试从 SELECT 中选择最后一行标识符进行插入时出现 bug 的问题,在 SELECT 没有行的情况下会失败。对于这样的语句,内联标志被设置为 True,表示不应获取最后一个主键。
    参考:#3876

oracle

  • [oracle] [bug] [postgresql]
    修复了一个 bug,在源表包含自动递增序列的情况下,从 SELECT 进行插入会无法正确编译。
    参考:#3877
  • [oracle] [bug]
    修复了在 Oracle 9.2 上在 ALL_TABLES 查询中使用“COMPRESSION”关键字的 bug;尽管 Oracle 文档指出表压缩是在 9i 中引入的,但实际列直到 10.1 才存在。
    参考:#3875

misc

  • [bug] [py3k]
    修复了与未带‘r’修饰符的转义字符串相关的 Python 3.6 DeprecationWarnings,并为 Python 3.6 添加了测试覆盖。
    此更改也回溯到:1.0.17
    参考:#3886
  • [bug] [firebird]
    将用于 Oracle 引用小写名称的修复移植到 Firebird,以便可以正确反映以小写引用的表名,包括表名来自 get_table_names() 检查函数的情况。
    参考:#3548

orm

  • [orm] [bug]
    修复了涉及多个实体的连接急加载以及同时使用多态继承时会抛出“‘NoneType’ object has no attribute ‘isa’”错误的 bug。此问题是由于 #3611 的修复引入的。
    此更改也回溯到:1.0.17
    参考:#3884
  • [orm] [bug]
    修复了子查询加载中的 bug,当对象作为“现有”行遇到时,例如在同一查询中从不同路径加载的对象,不会为指定了此加载的未加载属性调用子查询加载器。这个问题与 #3431#3811 中涉及的与连接加载类似的问题在同一领域。
    参考:#3854
  • [orm] [bug]
    Session.no_autoflush 上下文管理器现在确保在“finally”块中重置自动刷新标志,因此如果在块内引发异常,则状态仍会适当重置。感谢 Emin Arakelian 的拉取请求。
  • [orm] [bug]
    修复了单表继承查询条件不会插入到查询中的 bug,即在选择条件中使用 Bundle 构造时。
    参考:#3874
  • [orm] [bug]
    修复了与 #3177 相关的 bug,即 Query 发出的 UNION 或其他集合操作会将“单继承”条件应用于联合的外部(还引用了错误的可选择项),尽管现在预期这些条件已经存在于内部子查询中。一旦对 Query 调用 union() 或其他集合操作,单继承条件就会像 Query.from_self() 一样被省略。
    参考:#3856

示例

  • [examples] [bug]
    修复了版本化历史示例的两个问题,一个是历史表现在  autoincrement=False 以避免 1.1 版本关于具有自动增量的复合主键的新错误;另一个是现在使用  sqlite_autoincrement 标志以确保在 SQLite 上,即使删除了某些行,也会为表的生命周期使用唯一标识符。感谢 Carlos  García Montoro 的拉取请求。
    参考:#3872

引擎

  • [engine] [bug]
    Table 反射的“extend_existing”选项会导致索引和约束在使用 MetaData.reflect()(如 automap 扩展所做的那样)参数时会重复出现,因为表会在外键路径和直接反射两次。在 MetaData.reflect() 序列中传递一个新的去重集合,以防止这种重复反射。
    参考:#3861

sql

  • [sql] [bug]
    修复了最初在 0.9 版本中引入的 bug,通过 #1068,其中  order_by()  会根据名称对标签进行排序,即使标记的表达式与可选择的其他表达式在其他地方明确或隐式地存在,也是如此。现在,按标签排序的逻辑确保标记的表达式与解析为该名称的表达式相关联,然后再按标签名称排序;此外,名称必须在表达式的其他地方明确表示为实际标签,而不仅仅是列名。这种逻辑与按照(文本名称)排序的功能严格分开,后者具有稍微不同的目的。
    参考:#3882
  • [sql] [bug]
    修复了 1.1 版本的一个回归问题,即 import * 对于 sqlalchemy.sql.expression 不起作用,因为 any_all_ 函数拼写错误。
    参考:#3878
  • [sql] [bug]
    MetaData.reflect() 中“无法反射”异常中嵌入的引擎 URL 现在隐藏了密码;此外,TLEngine__repr__ 现在的行为类似于 Engine,隐藏了 URL 密码。感谢 Valery Yundin 提交的拉取请求。
  • [sql] [bug]
    修复了 Variant 中的问题,其中“右手边强制转换”逻辑,继承自 TypeDecorator,会将右侧强制转换为 Variant 本身,而不是默认类型所做的。在 Variant 的情况下,我们希望该类型大部分像基本类型一样运行,因此现在覆盖了 TypeDecorator 的默认逻辑,以回退到基础包装类型的逻辑。目前主要与 JSON 相关。
    参考:#3859
  • [sql] [bg]
    修复了 literal_binds 编译器标志未被 Insert 构造的“多值”功能所遵守的 bug;随后的值现在被呈现为文字值。
    参考:#3880

postgresql

  • [postgresql] [bug]
    修复了新的“ON CONFLICT DO UPDATE”功能中的 bug,即 UPDATE 子句的“set”值不会受到类型级别处理的影响,通常会处理用户定义的类型级别转换以及方言所需的转换,例如 JSON 数据类型所需的转换。此外,澄清了set_字典中的键应与列的“key”匹配,如果与列名不同。对于不匹配列键的剩余列名发出警告;出于兼容性原因,这些列名会像以前一样发出。
    参考:#3888
  • [postgresql] [bug]
    TIMETIMESTAMP 数据类型现在支持“precision”设置为零;以前零会被忽略。感谢 Ionuț Ciocîrlan 的拉取请求。

mysql

  • [mysql] [feature]
    添加了一个新参数mysql_prefix,由Index构造支持,允许指定 MySQL 特定的前缀,如“FULLTEXT”。感谢 Joseph Schorr 的拉取请求。
  • [mysql] [bug]
    MySQL 方言现在不会在反射列上有“COMMENT”关键字时发出警告,但请注意评论尚未反映;这在将来的版本中计划。感谢 Lele Long 的拉取请求。
    参考:#3867

mssql

  • [mssql] [bug]
    修复了 SQL Server 方言尝试选择 INSERT from SELECT 的最后一行标识时失败的 bug,在 SELECT 没有行的情况下会失败。对于这样的语句,内联标志设置为 True,表示不应获取最后一个主键。
    参考:#3876

oracle

  • [oracle] [bug] [postgresql]
    修复了在源表包含自动递增序列的情况下,从 SELECT 进行 INSERT 会导致编译错误的 bug。
    参考:#3877
  • [oracle] [bug]
    修复了在 Oracle 9.2 上在 ALL_TABLES 查询中使用“COMPRESSION”关键字的 bug;尽管 Oracle 文档中指出表压缩是在 9i 中引入的,但实际列直到 10.1 才存在。
    参考:#3875

misc

  • [bug] [py3k]
    修复了与没有‘r’修饰符的转义字符串相关的 Python 3.6 DeprecationWarnings,并为 Python 3.6 添加了测试覆盖。
    此更改也已回溯到:1.0.17
    参考:#3886
  • [bug] [firebird]
    将解决 Oracle 引号小写名称的问题移植到 Firebird,以便可以正确反映作为小写引号的表名,包括表名来自 get_table_names() 检查函数时。
    参考:#3548

1.1.4

发布日期:2016 年 11 月 15 日

orm

  • [orm] [bug]
    修复了 Session.bulk_update_mappings() 中的 bug,即备用命名的主键属性无法正确跟踪到 UPDATE 语句中的问题。
    此更改也回溯至:1.0.16
    参考:#3849
  • [orm] [bug]
    修复了 Session.bulk_save() 中的 bug,当与实现版本 id 计数器的映射配合使用时,UPDATE 将无法正确运行的问题。
    此更改也回溯至:1.0.16
    参考:#3781
  • [orm] [bug]
    修复了一个 bug,即当在第一次调用这些访问器之后向映射器/类添加映射器属性或其他 ORM 构造时,Mapper.attrsMapper.all_orm_descriptors 和其他派生属性将无法刷新的问题。
    此更改也回溯至:1.0.16
    参考:#3778
  • [orm] [bug]
    由于 #3457 导致的 collections 中的回归 bug 修复,即在 pickle 或 deepcopy 过程中反序列化将无法建立 ORM 集合的所有属性,导致进一步的变异操作失败。
    参考:#3852
  • [orm] [bug]
    修复了长期存在的 bug,即“noload”关系加载策略会导致忽略 backrefs 和/或 back_populates 选项的问题。
    参考:#3845

engine

  • [engine] [bug]
    Connection 中删除了长期存在但已损坏的“default_schema_name()”方法。该方法是来自非常旧的版本,并且是不工作的(例如,将引发异常)。感谢 Benjamin Dopplinger 提供的拉取请求。

sql

  • [sql] [bug]
    修复了新增的警告,用于没有设置自增设置的插入主键时会失败正确发出的问题(参见 #3216),当应用于小写 table() 构造时。
    参考:#3842

postgresql

  • [postgresql] [bug]
    由于修复#3807(版本 1.1.0)引起的回归错误,我们确保在 PostgreSQL 的 ON CONFLICT 的 DO UPDATE 部分的 WHERE 子句中限定了表名,然而你不能在实际的 ON CONFLICT 本身的 WHERE 子句中放置表名。这是一个错误的假设,因此在#3807中的这部分更改被撤销。
    参考:#3807, #3846

mysql

  • [mysql] [feature]
    为 mysqlclient 和 pymysql 方言添加了对服务器端游标的支持。这个功能可以通过Connection.execution_options.stream_results标志以及相同方式中的server_side_cursors=True方言参数来使用,就像在 PostgreSQL 上的 psycopg2 中一样。感谢 Roman Podoliaka 的拉取请求。
  • [mysql] [bug]
    MySQL  的原生 ENUM 类型支持发送任何非有效值,并且会返回一个空字符串。为了将这个空字符串返回给应用程序而不被拒绝为非有效值,MySQL 的  ENUM 实现中添加了一个硬编码规则来检查“是否返回空字符串”。请注意,如果你的 MySQL 枚举将值链接到对象,你仍然会得到空字符串返回。
    参考:#3841

sqlite

  • [sqlite] [bug]
    在 pysqlcipher 方言的 PRAGMA 指令中添加了引号,以适当支持额外的密码参数。感谢 Kevin Jurczyk 的拉取请求。
  • [sqlite] [bug] [py3k]
    在使用 pysqlcipher 方言时,为 pysqlcipher3 DBAPI 添加了一个可选导入。如果 Python-2 专用的 pysqlcipher DBAPI 不存在,这个包将尝试被导入。感谢 Kevin Jurczyk 的拉取请求。

mssql

  • [mssql] [bug]
    修复了 pyodbc 方言(以及大部分不工作的 adodbapi 方言)中的错误,其中密码或用户名字段中存在的分号可能被解释为另一个标记的分隔符;当存在分号时,现在这些值将被引用。
    此更改也被回溯到:1.0.16
    参考:#3762

orm

  • [orm] [bug]
    修复了Session.bulk_update_mappings()中的错误,其中替代命名的主键属性无法正确跟踪到 UPDATE 语句中。
    此更改也被回溯到:1.0.16
    参考:#3849
  • [orm] [bug]
    修复了Session.bulk_save()中的错误,其中 UPDATE 与实现版本 id 计数器的映射无法正确运行。
    此更改也回溯到:1.0.16
    参考:#3781
  • [ORM] [错误]
    修复了当在首次调用这些访问器后向映射器/类添加映射器属性或其他 ORM 构造时,Mapper.attrsMapper.all_orm_descriptors 和其他派生属性无法刷新的 bug。
    此更改也回溯到:1.0.16
    参考:#3778
  • [ORM] [错误]
    由于 #3457 导致的集合中的反序列化回退问题已修复,pickle 或 deepcopy 过程中会导致 ORM 集合的所有属性无法建立,进而导致进一步的变异操作失败。
    参考:#3852
  • [ORM] [错误]
    修复了长期存在的 bug,即“noload”关系加载策略会导致 backrefs 和/或 back_populates 选项被忽略的问题。
    参考:#3845

引擎

  • [引擎] [错误]
    Connection中移除了长期存在的破损的“default_schema_name()”方法。这个方法是从一个非常旧的版本遗留下来的,是无效的(例如,会引发异常)。感谢 Benjamin Dopplinger 的拉取请求。

sql

  • [sql] [错误]
    修复了一个 bug,即在没有设置自动增量的情况下插入主键时新增的警告(参见 #3216)在调用小写 table() 构造时无法正确发出。
    参考:#3842

postgresql

  • [postgresql] [错误]
    由于修复 #3807(版本 1.1.0)引起的回退,我们确保在 PostgreSQL 的 ON CONFLICT 的 DO UPDATE 部分的 WHERE 子句中限定了表名,然而实际上不能在 ON CONFLICT 本身的 WHERE 子句中放置表名。这是一个错误的假设,因此将回滚 #3807 中的这部分更改。
    参考:#3807#3846

mysql

  • [mysql] [特性]
    为 mysqlclient 和 pymysql 方言添加了对服务器端游标的支持。通过Connection.execution_options.stream_results标志以及相同方式的server_side_cursors=True方言参数可用此功能,就像在 PostgreSQL 上对 psycopg2 一样。感谢 Roman Podoliaka 的 Pull 请求。
  • [mysql] [bug]
    MySQL  的本机 ENUM 类型支持发送任何非有效值,并且响应将返回空字符串。已向 ENUM 的 MySQL  实现添加了一个硬编码规则,以检查“返回空字符串”,以便将此空字符串返回给应用程序而不被拒绝为非有效值。请注意,如果您的 MySQL  枚举将值链接到对象,则仍然会返回空字符串。
    引用:#3841

sqlite

  • [sqlite] [bug]
    在 pysqlcipher 方言中的 PRAGMA 指令中添加了引号,以适当支持附加的密码参数。感谢 Kevin Jurczyk 的 Pull 请求。
  • [sqlite] [bug] [py3k]
    在使用 pysqlcipher 方言时,为 pysqlcipher3 DBAPI 添加了可选导入。如果 Python-2 仅 pysqlcipher DBAPI 不存在,则尝试导入此包。感谢 Kevin Jurczyk 的 Pull 请求。

mssql

  • [mssql] [bug]
    修复了 pyodbc 方言中的错误(以及基本上不起作用的 adodbapi 方言中的错误),其中密码或用户名字段中存在分号时可能会将分号解释为另一个令牌的分隔符;现在在存在分号时对值进行引用。
    此更改还被回溯到:1.0.16
    引用:#3762


SqlAlchemy 2.0 中文文档(六十二)(4)https://developer.aliyun.com/article/1560761

相关文章
|
3月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十四)(3)
SqlAlchemy 2.0 中文文档(六十四)
29 0
|
3月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十四)(1)
SqlAlchemy 2.0 中文文档(六十四)
35 0
|
3月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十二)(4)
SqlAlchemy 2.0 中文文档(六十二)
20 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十二)(1)
SqlAlchemy 2.0 中文文档(六十二)
15 0
|
3月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十二)(2)
SqlAlchemy 2.0 中文文档(六十二)
19 0
|
3月前
|
SQL JSON 关系型数据库
SqlAlchemy 2.0 中文文档(六十二)(5)
SqlAlchemy 2.0 中文文档(六十二)
14 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十七)(2)
SqlAlchemy 2.0 中文文档(六十七)
14 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十七)(5)
SqlAlchemy 2.0 中文文档(六十七)
23 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十七)(1)
SqlAlchemy 2.0 中文文档(六十七)
32 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十七)(3)
SqlAlchemy 2.0 中文文档(六十七)
20 0