SqlAlchemy 2.0 中文文档(六十一)(4)

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: SqlAlchemy 2.0 中文文档(六十一)

SqlAlchemy 2.0 中文文档(六十一)(3)https://developer.aliyun.com/article/1560911


1.2.0

发布日期:2017 年 12 月 27 日

ORM

  • [ORM] [特性]
    向 ORM 的标识键元组添加了一个新的数据成员,称为“identity_token”。此令牌默认为 None,但可以被数据库分片方案用来区分内存中具有相同主键但来自不同数据库的对象。水平分片扩展将此令牌与分片标识符应用,从而允许主键在水平分片后端之间重复。
    另请参阅
    支持分片的标识键增强
    参考:#4137
  • [ORM] [错误] [扩展]
    修复了关联代理无意中将自身链接到AliasedClass对象的错误,如果首先使用AliasedClass作为父级调用,会导致后续使用时出错。
    此更改也回溯到���1.1.15
    参考:#4116
  • [ORM] [错误]
    修复了在contains_eager()查询选项中的错误,其中使用 PropComparator.of_type() 引用跨多个连接级别到子类的路径还需要提供“别名”参数,并且需要与同一子类型一起使用 aliased() 对象;此外,对于使用 aliased() 对象作为 PropComparator.of_type() 参数的子类,使用 contains_eager() 也将正确渲染。
    参考:#4130
  • [orm] [bug]
    Query.exists() 方法现在将在查询被渲染时禁用急加载器。先前,连接的急加载连接将被不必要地渲染,以及不必要地生成子查询急加载查询。新行为与 Query.subquery() 方法相匹配。
    参考:#4032

orm 声明式

  • [orm] [声明式] [bug]
    修复了在刷新操作期间引用描述符时的错误,该描述符是基于 AbstractConcreteBase 的层次结构中的映射列或其他位置的关系。由于该属性未映射为映射器属性,因此会导致错误。如果类未在其映射器中包含“concrete=True”,则还可能出现类似的问题,例如 AbstractConcreteBase 添加的“type”列,但是此处的检查也应防止该方案引起问题。
    此更改也回溯到:1.1.15
    参考:#4124

引擎

  • [engine] [feature]
    URL 对象的“password”属性现在可以是任何用户定义或用户子类化的字符串对象,该对象对 Python str() 内置函数做出响应。传递的对象将作为数据成员 URL.password_original 维护,并在读取 URL.password 属性以生成字符串值时进行查询。
    参考:#4089

sql

  • [sql] [bug]
    修复了如果参数是元组,则ColumnDefault__repr__会失败的错误。感谢 Nicolas Caniart 提供的拉取请求。
    此更改也回溯到:1.1.15
    参考:#4126
  • [sql] [bug]
    重新设计了在 1.2.0b2 中引入的 startswith(),endswith()的新“autoescape”选项中的新“autoescape”功能,使其完全自动化;转义字符现在默认为斜杠"/",并应用于百分号、下划线以及转义字符本身,以实现完全自动转义。也可以使用“escape”参数更改字符。
    另请参阅
    startswith(),endswith()的新“autoescape”选项
    参考:#2694
  • [sql] [bug]
    修复了Table.tometadata()方法无法正确适应不由简单列表达式组成的Index对象的错误,例如针对text()构造的索引,使用 SQL 表达式或func的索引等。现在该程序将表达式完全复制到新的Index对象中,同时将所有绑定到目标表的Column对象替换为目标表的对象。
    参考:#4147
  • [sql] [bug]
    ColumnElement的“visit name”从“column”更改为“column_element”,这样当此元素被用作用户定义的 SQL 元素的基础时,不会被各种 SQL 遍历工具(通常由 ORM 使用)处理时假定其行为类似于绑定到表的ColumnClause
    参考:#4142
  • [sql] [bug] [ext]
    修复了 ARRAY 数据类型中的问题,本质上与 #3832 的问题相同,只是不是一个回归,即在 ARRAY 上的列附加事件不会正确触发,从而干扰依赖于此的系统。这个问题破坏的一个关键用例是使用 mixins 声明使用 MutableList.as_mutable() 的列。
    参考:#4141
  • [sql] [bug]
    修复了新的“扩展绑定参数”功能中的 bug,即如果一个语句中使用了多个参数,则正则表达式将无法正确匹配参数名。
    参考:#4140
  • [sql] [enhancement]
    在  PostgreSQL、MySQL、MS SQL Server(以及不支持的 Sybase  方言中)实现了“DELETE…FROM”语法,类似于“UPDATE…FROM”的工作方式。引用多个表的 DELETE  语句将切换到“多表”模式,并呈现数据库理解的适当的“USING”或多表“FROM”子句。感谢 Pieter Mulder 的拉取请求。
    另请参阅
    DELETE 的多表条件支持
    参考:#959

postgresql

  • [postgresql] [feature]
    添加了新的MONEY 数据类型。感谢 Cleber J Santos 的拉取请求。

mysql

  • [mysql] [bug]
    MySQL 5.7.20 现在警告使用 @tx_isolation 变量;现在执行版本检查并使用 @transaction_isolation 代替以防止此警告。
    此更改也回溯到:1.1.15
    参考:#4120
  • [mysql] [bug]
    修复了从问题 1.2.0b3 中的回归,其中“MariaDB”版本比较可能在某些特定的 MariaDB 版本字符串下在 Python 3 中失败。
    参考:#4115

mssql

  • [mssql] [bug]
    修复了在 pyodbc 中 sqltypes.BINARY 和 sqltypes.VARBINARY 数据类型不包含正确的 bound-value 处理程序的 bug,这允许传递 pyodbc.NullParam 值以帮助 FreeTDS。
    参考:#4121

oracle

  • [oracle] [bug]
    添加了一些额外规则,以完全处理使用 asdecimal=True 时,cx_Oracle 数值中的 Decimal('Infinity')Decimal('-Infinity') 值。
    参考:#4064

杂项

  • [misc] [feature]
    在文档中添加了一个新的错误部分,其中包含关于常见错误消息的背景信息。SQLAlchemy 中的选定异常将在其字符串输出中包含指向此页面相关部分的链接。
  • [enhancement] [ext]
    添加了新方法Result.with_post_criteria()到烘焙查询系统,允许在从缓存中提取查询后进行非 SQL 修改转换。此方法可以与ShardedQuery一起使用,以设置分片标识符。ShardedQuery也已经修改,使其ShardedQuery.get()方法与Result的方法正确交互。
    参考:#4135

orm

  • [orm] [功能]
    向 ORM  的身份映射中使用的身份键元组添加了一个名为“identity_token”的新数据成员。此令牌默认为  None,但可以被数据库分片方案用来区分来自不同数据库的具有相同主键的内存对象。水平分片扩展将此令牌与分片标识符结合起来,从而允许主键在水平分片后端之间重复。
    另请参见
    支持分片的身份键增强
    参考:#4137
  • [orm] [错误] [扩展]
    修复了关联代理在首次使用时会错误地将自身链接到AliasedClass对象的错误,如果首先将AliasedClass作为父级调用,将导致后续使用时出现错误。
    此更改也已回溯到:1.1.15
    参考:#4116
  • [orm] [错误]
    修复了contains_eager()查询选项中的错误,其中使用路径使用PropComparator.of_type()引用跨越多个级别的连接到子类的情况还需要提供“alias”参数,以避免向查询添加不需要的 FROM 子句;此外,跨子类使用aliased()对象作为PropComparator.of_type()参数使用contains_eager()也将正确呈现。
    参考:#4130
  • [orm] [错误]
    Query.exists() 方法现在在查询被渲染时会禁用急加载器。以前,连接急加载连接会被不必要地渲染,以及子查询急加载查询也会被不必要地生成。新行为与 Query.subquery() 方法相匹配。
    参考:#4032

orm declarative

  • [orm] [declarative] [bug]
    修复了一个 bug,其中描述符,在基于 AbstractConcreteBase 的层次结构中的映射列或关系,在刷新操作期间会被引用,导致错误,因为该属性未映射为映射器属性。如果类未在其映射器中包含“concrete=True”,则类似问题也可能出现在其他属性上,比如 AbstractConcreteBase 添加的“type” 列,但此处的检查也应防止该场景引起问题。
    此更改也被 回溯 至:1.1.15
    参考:#4124

engine

  • [engine] [feature]
    URL 对象的“password”属性现在可以是任何用户定义或用户子类化的字符串对象,该对象响应于 Python 的 str() 内置函数。传递的对象将保持为数据成员 URL.password_original,并在读取 URL.password 属性时进行查询以生成字符串值。
    参考:#4089

sql

  • [sql] [bug]
    修复了 __repr__ColumnDefault 在参数为元组时会失败的错误。感谢 Nicolas Caniart 提交的拉取请求。
    此更改也被 回溯 至:1.1.15
    参考:#4126
  • [sql] [bug]
    重新设计了在 1.2.0b2 中引入的 New “autoescape” option for startswith(), endswith() 中的新“autoescape”功能,现在完全自动化;转义字符现在默认为正斜杠 "/",并应用于百分号、下划线,以及转义字符本身,实现完全自动转义。该字符也可以使用“escape”参数进行更改。
    另请参阅
    New “autoescape” option for startswith(), endswith()
    参考:#2694
  • [sql] [bug]
    修复了Table.tometadata()方法无法正确适应不仅由简单列表达式组成的Index对象,例如针对text()构造的索引,使用 SQL 表达式或 func 的索引等。现在,该例程将完全复制表达式到新的Index对象,同时将所有绑定到目标表的Column对象替换为目标表的对象。
    参考:#4147
  • [sql] [bug]
    ColumnElement的“visit name”从“column”更改为“column_element”,这样当此元素用作用户定义的 SQL 元素的基础时,不会被假定为在被各种 SQL 遍历工具处理时表现得像绑定到表的ColumnClause,这些工具通常被 ORM 使用。
    参考:#4142
  • [sql] [bug] [ext]
    修复了 ARRAY 数据类型中的问题,本质上与 #3832 的问题相同,只是不是一个回归,即在 ARRAY 上的列附加事件不会正确触发,从而干扰依赖此功能的系统。这一问题破坏的一个关键用例是使用 mixins 声明使用 MutableList.as_mutable() 的列。
    参考:#4141
  • [sql] [bug]
    修复了新的“扩展绑定参数”功能中的 bug,即如果一个语句中使用了多个参数,则正则表达式将无法正确匹配参数名称。
    参考:#4140
  • [sql] [enhancement]
    实现了针对  PostgreSQL、MySQL、MS SQL Server(以及不支持的 Sybase  方言)的“DELETE…FROM”语法,类似于“UPDATE…FROM”工作方式。引用多个表的 DELETE  语句将切换到“多表”模式,并根据数据库理解的方式生成适当的“USING”或多表“FROM”子句。感谢 Pieter Mulder 的拉取请求。
    另请参阅
    支持多表条件的 DELETE
    参考:#959

postgresql

  • [postgresql] [feature]
    添加了新的MONEY数据类型。感谢 Cleber J Santos 的拉取请求。

mysql

  • [mysql] [bug]
    MySQL 5.7.20 现在警告使用@tx_isolation 变量;现在执行版本检查并使用@transaction_isolation 代替以防止此警告。
    此更改也回溯到:1.1.15
    参考:#4120
  • [mysql] [bug]
    修复了从问题 1.2.0b3 中的回归,其中“MariaDB”版本比较可能在某些特定 MariaDB 版本字符串下在 Python 3 下失败。
    参考:#4115

mssql

  • [mssql] [bug]
    修复了一个 bug,其中 sqltypes.BINARY 和 sqltypes.VARBINARY 数据类型不会为 pyodbc 包括正确的绑定值处理程序,这允许传递 pyodbc.NullParam 值,有助于 FreeTDS。
    参考:#4121

oracle

  • [oracle] [bug]
    添加了一些额外规则,以完全处理Decimal('Infinity')Decimal('-Infinity')值与使用asdecimal=True时的 cx_Oracle 数值。
    参考:#4064

misc

  • [misc] [feature]
    在文档中添加了一个新的错误部分,介绍常见错误消息的背景。SQLAlchemy 中的选定异常将在其字符串输出中包含指向此页面相关部分的链接。
  • [enhancement] [ext]
    添加了新方法Result.with_post_criteria()到烘焙查询系统,允许在查询从缓存中拉取后进行非 SQL 修改转换。除其他外,此方法可与ShardedQuery一起使用以设置分片标识符。ShardedQuery也已修改,使其ShardedQuery.get()方法与Result的方法正确交互。
    参考:#4135

1.2.0b3

发布日期:2017 年 10 月 13 日

orm

  • [orm] [bug]
    修复了一个 bug,其中 ORM 关系会警告存在冲突的同步目标(例如,两个关系都将写入同一列)对于继承层次结构中的兄弟类,在这种情况下,两个关系实际上永远不会在写入时发生冲突。
    此更改也回溯到:1.1.15
    参考:#4078
  • [orm] [bug]
    修复了一个 bug,其中针对单表继承实体使用相关选择会导致外部查询无法正确呈现,因为调整单一继承鉴别器条件不适当地重新应用于外部查询。
    此��改也回溯到:1.1.15
    参考:#4103
  • [orm] [bug]
    Session.merge()中修复了一个错误,与#4030类似,其中对于标识映射中的目标对象的内部检查,如果在合并过程实际检索对象之前立即被垃圾回收,可能会导致错误。
    此更改也回溯到:1.1.14
    参考:#4069
  • [orm] [bug]
    修复了一个错误,即如果从使用连接式急加载加载的关系扩展,则不会识别undefer_group()选项。此外,由于该错误导致执行过多的工作,因此在结果集列的初始计算中,Python 函数调用次数也提高了 20%,这与#3915的连接急加载改进相辅相成。
    此更改也回溯到:1.1.14
    参考:#4048
  • [orm] [bug]
    修复了一个错误,在Session.merge()中,如果集合中的对象的主键属性设置为None,而该属性通常是自动递增的键,则在内部去重过程的一部分中,这些对象将被视为数据库持久化键,导致实际上只有一个对象被插入到数据库中。
    此更改也回溯到:1.1.14
    参考:#4056
  • [orm] [bug]
    当针对不是针对MapperProperty的属性(如关联代理)使用synonym()时,会引发InvalidRequestError。以前,尝试定位不存在的属性会导致递归溢出。
    此更改也回溯到:1.1.14
    参考:#4067
  • [orm] [bug]
    修复了 1.2.0b1 中引入的回归问题,由于#3934,如果回滚失败(目标问题是当 MySQL 丢失 SAVEPOINT 时),Session将无法“停用”事务。这将导致随后对Session.rollback()的调用再次引发错误,而不是完成并将Session恢复为活动状态。
    参考:#4050
  • [orm] [bug]
    修复了make_transient_to_detached()函数会使目标对象上的所有属性过期的问题,包括“延迟加载”属性,这会导致下一次刷新时属性被取消延迟加载,从而导致属性意外加载。
    参考:#4084
  • [orm] [bug]
    修复了涉及 delete-orphan 级联的 bug,其中相关项目在父对象成为会话的一部分之前成为孤儿,仍然被跟踪为进入孤儿状态,导致其从会话中被清除而不是被刷新。
    注意
    这个修复在 1.2.0b3 发布期间被错误地合并,并且没有被添加到更改日志中。这个更改日志注释是作为版本 1.2.13 的一部分事后添加的。
    参考:#4040
  • [orm] [bug]
    修复了“selectin”多态加载,使用单独的 IN 查询加载子类中的错误,该错误阻止了多级类层次结构中“selectin”和“inline”设置按预期交互。
    参考:#4026
  • [orm] [bug]
    移除了当映射器和加载策略使用的  LRU  缓存达到阈值时发出的警告;最初这个警告的目的是防止生成过多的缓存键,但后来基本上成为“创建许多引擎”反模式的检查。虽然这仍然是一个反模式,但测试套件中既为每个测试创建一个引擎又在所有警告上引发的存在将是一个不便;对于这个警告,这些测试套件改变其架构并不是必要的(尽管每个测试一个引擎的套件总是更好)。
    参考:#4071
  • [orm] [bug]
    修复了一个回归问题,即在与延迟加载关系选项一起使用undefer_group()选项时,由于 1.2 版本中作为#3954的一部分添加的 SQL 缓存键生成中的错误,会导致属性错误。
    参考:#4049
  • [orm] [bug]
    修改了在#3366中对  ORM 更新/删除评估器所做的更改,如果更新或删除中存在未映射的列表达式,并且评估器可以将其名称与目标类的映射列匹配,将发出警告,而不是引发  UnevaluatableError。这本质上是 1.2  版本之前的行为,目的是允许正在依赖此模式的应用程序进行迁移。但是,如果给定的属性名称无法与映射器的列匹配,仍会引发  UnevaluatableError,这是在#3366中修复的问题。
    参考:#4073

orm declarative

  • [orm] [declarative] [bug]
    如果子类尝试覆盖在父类上声明的属性,并使用@declared_attr.cascading,则会发出警告,指出覆盖的属性将被忽略。这种用例无法在更深层次的子类中得到完全支持,因此为了一致性,无论覆盖属性如何,“级联”都会一直被遵守。
    参考:#4091
  • [orm] [declarative] [bug]
    如果使用@declared_attr.cascading属性与特殊的声明名称(如__tablename__)一起使用,则会发出警告,因为这没有效果。
    参考:#4092

engine

  • [engine] [feature]
    ResultProxy添加了__next__()next()方法,以便直接在对象上使用next()内置函数。ResultProxy长期以来已经有一个__iter__()方法,允许它响应iter()内置函数。__iter__()的实现未更改,因为性能测试表明,使用带有StopIteration__next__()方法进行迭代在 Python 2.7 和 3.6 中都要慢大约 20%。
    参考:#4077
  • [engine] [bug]
    PoolConnection进行了一些调整,使得在pool.EmptyAttributeError异常捕获下不会运行恢复逻辑,因为当恢复操作本身失败时,Python 3 会创建一个误导性的堆栈跟踪,将Empty / AttributeError作为原因,而实际上这些异常捕获是控制流的一部分。
    参考文献:#4028

sql

  • [sql] [bug]
    修复了最近添加的 ColumnOperators.any_()ColumnOperators.all_() 方法在作为方法调用时不起作用的错误,与使用独立函数 any_()all_() 相对,还为这些相对不直观的 SQL 运算符添加了文档示例。
    此更改还 反向移植 至:1.1.15
    参考文献:#4093
  • [sql] [bug]
    添加了一个新方法 DefaultExecutionContext.get_current_parameters(),该方法在函数型默认值生成器中使用,以便检索传递给语句的当前参数。新函数与 DefaultExecutionContext.current_parameters 属性不同之处在于,它还提供了参数的可选分组,这些参数对应于多值“插入”构造。以前无法识别与函数调用相关的参数子集。
    请参阅
    用于具有上下文默认生成器的多值插入的参数辅助程序
    上下文敏感的默认函数
    参考文献:#4075
  • [sql] [bug]
    修复了新的 SQL 注释功能中的错误,当使用 Table.tometadata() 时,表和列注释不会被复制。
    参考文献:#4087
  • [sql] [bug]
    在版本 1.1 中,Boolean 类型存在问题,即通过 bool() 进行布尔强制转换会发生在不支持“原生布尔”的后端,但不会发生在原生布尔后端,这意味着字符串 "0" 现在表现不一致。经过一次投票,达成共识,即非布尔值应该引发错误,特别是在字符串 "0" 的模棱两可情况下;因此,如果传入值不在范围 None, True, False, 1, 0 内,Boolean 数据类型现在将引发 ValueError
    参见
    布尔数据类型现在强制执行严格的 True/False/None 值
    参考:#4102
  • [sql] [bug]
    优化了Operators.op()的行为,使得在所有情况下,如果Operators.op.is_comparison标志设置为 True,则生成表达式的返回类型将是Boolean,如果标志为 False,则生成表达式的返回类型将与左侧表达式的类型相同,这是其他运算符的典型默认行为。还添加了一个新参数Operators.op.return_type以及一个辅助方法Operators.bool_op()
    参见
    自定义运算符的类型行为已经保持一致
    参考:#4063
  • [sql] [bug]
    EnumIntervalBoolean类型进行了内部优化,现在它们都扩展了一个通用的 mixin Emulated,表示提供了对数据库本地类型的 Python 端模拟,在使用支持的后端时切换到数据库本地类型。直接使用 PostgreSQL INTERVAL 类型现在将包括正确的类型强制转换规则,对于也适用于 Interval 的 SQL 表达式(例如将日期添加到间隔会产生日期时间)。
    参考:#4088

postgresql

  • [postgresql] [feature]
    向 psycopg2 方言添加了一个新标志use_batch_mode。当Engine调用cursor.executemany()时,此标志启用了 psycopg2 的psycopg2.extras.execute_batch扩展。此扩展在批量运行 INSERT 语句时提供了关键的性能提升,性能提升超过一个数量级。该标志默认为 False,因为目前被认为是实验性的。
    另请参阅
    批处理模式/快速执行助手的支持
    参考:#4109
  • [postgresql] [bug]
    针对与 COLLATE 一起的ARRAY类进行了进一步修复,因为在#4006中进行的修复未能适应多维数组。
    此更改也回溯至:1.1.15
    参考:#4006
  • [postgresql] [bug]
    修复了array_agg函数中的错误,其中传递一个已经是ARRAY类型的参数,例如 PostgreSQL array构造,将产生ValueError,因为函数尝试嵌套数组。
    此更改也回溯至:1.1.15
    参考:#4107
  • [postgresql] [bug]
    修复了 PostgreSQL Insert.on_conflict_do_update()中的错误,该错误将阻止将插入语句用作 CTE,例如通过Insert.cte()在另一个语句中使用。
    此更改也回溯至:1.1.15
    参考:#4074
  • [postgresql] [bug]
    修复了 pg8000 驱动程序在使用带有模式名称的MetaData.reflect()时会失败的错误,因为模式名称将作为“quoted_name”对象发送,该对象是一个字符串子类,pg8000 不识别。连接时将 quoted_name 类型添加到 pg8000 的 py_types 集合中。
    参考:#4041
  • [postgresql] [bug]
    为 pg8000 驱动程序启用了 UUID 支持,支持此数据类型的本机 Python uuid 往返。但是仍不���持 UUID 数组。
    参考:#4016

mysql

  • [mysql] [bug]
    当检测到 MariaDB 10.2.8 或更早版本的 10.2 系列时,会发出警告,因为这些版本中的 CHECK 约束存在重大问题,这些问题在 10.2.9 中已解决。
    请注意,此更改日志消息并未随 SQLAlchemy 1.2.0b3 发布,而是事后添加的。
    此更改也被回溯到:1.1.15
    参考:#4097
  • [mysql] [bug]
    修复了在 MariaDB 10.2 系列中,由于语法更改,导致 CURRENT_TIMESTAMP 无法正确反映的问题,现在该函数表示为 current_timestamp()
    此更改也被回溯到:1.1.15
    参考:#4096
  • [mysql] [bug]
    MariaDB 10.2 现在支持 CHECK 约束(警告:由于上游问题,请使用版本 10.2.9 或更高版本,详见 #4097)。反射现在在 SHOW CREATE TABLE 输出中考虑这些 CHECK 约束。
    此更改也被回溯到:1.1.15
    参考:#4098
  • [mysql] [bug]
    将新的 MySQL INSERT…ON DUPLICATE KEY UPDATE 结构的 .values 属性更名为 .inserted,因为 Insert 已经有一个名为 Insert.values() 的方法。.inserted 属性最终呈现 MySQL 的 VALUES() 函数。
    参考:#4072

sqlite

  • [sqlite] [bug]
    修复了 SQLite CHECK 约束反射失败的 bug,如果引用的表位于远程模式中,例如 SQLite 中由 ATTACH 引用的远程数据库。
    此更改也被回溯到:1.1.15
    参考:#4099

mssql

  • [mssql] [feature]
    添加了一个新的 TIMESTAMP 数据类型,对 SQL Server 而言,它正确地像二进制数据类型而不是 datetime 类型,因为 SQL Server 在这里违反了 SQL 标准。还添加了 ROWVERSION,因为 SQL Server 中的TIMESTAMP类型已被弃用,改用 ROWVERSION。
    参考:#4086
  • [mssql] [feature]
    为 PyODBC 和 pymssql 方言添加了对“AUTOCOMMIT”隔离级别的支持,通过 Connection.execution_options() 来建立,这个隔离级别在底层连接对象上设置适当的 DBAPI 特定标志。
    参考:#4058
  • [mssql] [bug]
    为 SQL Server 的 PyODBC 方言添加了一整套“连接关闭”异常代码,包括‘08S01’、‘01002’、‘08003’、‘08007’、‘08S02’、‘08001’、‘HYT00’、‘HY010’。以前只覆盖了‘08S01’。
    此更改也被回溯到:1.1.15
    参考:#4095
  • [mssql] [bug]
    SQL Server 支持 SQLAlchemy 称之为“本地布尔”的 BIT 类型,因为此类型仅接受 0 或 1,而 DBAPI 将其值返回为 True/False。因此,SQL Server 方言现在启用了“本地布尔”支持,即不为Boolean数据类型生成 CHECK 约束。与其他本地布尔的唯一区别是没有“true” / “false”常量,因此这里仍然呈现为“1”和“0”。
    参考:#4061
  • [mssql] [bug]
    修复了 pymssql 方言中 SQL 文本中的百分号,例如在模数表达式或文字值中使用的情况,不会加倍,这似乎是 pymssql 所期望的。尽管 pymssql DBAPI 使用“pyformat”参数样式,该样式认为百分号是重要的。
    参考:#4057
  • [mssql] [bug]
    修复了 SQL Server 方言在反射自引用外键约束时可能从多个模式中提取列的错误,如果多个模式包含相同名称的约束针对相同名称的表。
    参考:#4060
  • [mssql] [bug] [orm]
    对于特定于“RETURNING”的方言的“rowcount  支持”添加了一个新类,当在使用时,例如在 SQL Server 上看起来像“OUTPUT inserted”时,PyODBC 后端无法在  OUTPUT 生效时给我们提供 UPDATE 或 DELETE 语句的 rowcount。这主要影响  ORM,当刷新正在更新包含服务器计算值的行时,如果后端未返回预期的行数,则会引发错误。PyODBC 现在声明支持 rowcount,除非存在  OUTPUT.inserted,ORM 在刷新期间会考虑是否寻找 rowcount。
    参考:#4062
  • [mssql] [bug] [orm]
    为 pymssql 方言启用了“sane_rowcount”标志,表示 DBAPI 现在从 UPDATE 或 DELETE 语句中报告受影响的行数。这主要影响 ORM 版本功能,因为现在它可以验证目标版本上受影响的行数。
  • [mssql] [bug]
    添加了一个规则到 SQL Server 索引反射中,忽略所谓的在未指定聚集索引的表上隐式存在的“堆”索引。
    参考:#4059

oracle

  • [oracle] [性能] [bug] [py2k]
    由于修复#3937导致的性能回归已修复,因为 cx_Oracle 从版本 5.3 开始从其命名空间中删除了.UNICODE符号,这被解释为  cx_Oracle 的“WITH_UNICODE”模式被无条件打开,从而在 SQLAlchemy 端调用函数将所有字符串无条件转换为  unicode 并导致性能影响。实际上,根据 cx_Oracle 的作者,“WITH_UNICODE”模式自 5.1 起已被完全移除,因此如果在  Python 2 下检测到 cx_Oracle 5.1 或更高版本,则不再需要昂贵的 unicode 转换函数,并且如果检测到  cx_Oracle 5.1 或更高版本,则会禁用这些函数。在#3937中删除的针对“WITH_UNICODE”模式的警告也已恢复。
    此更改也回溯到:1.1.13,1.0.19
    参考:#4035
  • [oracle] [bug]
    使用 cx_Oracle 实现了对 Oracle 值“无穷大”的部分支持,仅使用 Python 浮点值,例如float("inf")。目前,cx_Oracle DBAPI 驱动程序尚未实现对 Decimal 的��持。
    参考:#4064
  • [oracle] [bug]
    cx_Oracle  方言已经重构和现代化,以利用在旧的 4.x 系列 cx_Oracle 中不存在的新模式。其中最重要的变化涉及类型转换,主要是关于数字/浮点和  LOB 数据类型,更有效地利用 cx_Oracle 类型处理挂钩简化了绑定参数和结果数据的处理方式。
    另请参阅
    cx_Oracle 方言,类型系统的重大重构
  • [oracle] [bug]
    对于所有版本的  cx_Oracle,cx_Oracle 的两阶段支持已完全移除,而在 1.2.0b1 中,此更改仅对 cx_Oracle 的 6.x  系列生效。这个功能在任何版本的 cx_Oracle 中都从未正常工作过,在 cx_Oracle 6.x 中,SQLAlchemy 依赖的 API  被移除。
    另请参阅
    cx_Oracle 方言,类型系统的重大重构
    参考:#3997
  • [oracle] [bug]
    当使用Insert.returning()与 cx_Oracle 后端时,结果集中的列键现在使用正确的列名/标签,与所有其他方言一样。以前,这些列名为ret_nnn
    另请参阅
    cx_Oracle 方言,类型系统的重大重构
  • [oracle] [bug]
    cx_Oracle 方言的几个参数现在已被弃用且不会产生任何效果:auto_setinputsizesexclude_setinputsizesallow_twophase
    另请参阅
    对 cx_Oracle 方言、类型系统进行了重大重构
  • [oracle] [bug]
    修复了在 Oracle 下反映出的带有“column DESC”表达式的索引不会返回的 bug,如果表也没有主键,这是由于逻辑尝试过滤掉 Oracle 隐式添加到主键列上的索引所导致的。
    参考:#4042
  • [oracle] [bug]
    修复了由  cx_Oracle 6.0 引起的更多回归问题;目前,用户唯一的行为变化是断开连接检测现在除了检测  cx_Oracle.InterfaceError 外还检测  cx_Oracle.DatabaseError,因为这种行为似乎已经改变。关于数值精度和无法关闭连接的其他问题仍在上游 cx_Oracle  问题跟踪器中等待处理。
    参考:#4045
  • [oracle] [bug]
    修复了 Oracle 8 中“非 ANSI”连接模式不会向使用=运算符以外的运算符的表达式添加(+)运算符的 bug。(+)需要添加到右侧的所有列。
    参考:#4076

orm

  • [orm] [bug]
    修复了 ORM 关系在继承层次结构中的兄弟类中可能会发出警告,提示存在同步目标冲突的 bug(例如,两个关系都写入同一列),而这两个关系实际上在写入时永远不会发生冲突。
    此更改也回溯到:1.1.15
    参考:#4078
  • [orm] [bug]
    修复了针对单表继承实体使用的相关查询在外部查询中无法正确呈现的 bug,因为单一继承鉴别器条件的调整不当地重新应用到外部查询中。
    此更改也回溯到:1.1.15
    参考:#4103
  • [orm] [bug]
    修复了Session.merge()中的 bug,与#4030类似,其中对于标识映射中的目标对象的内部检查,如果在合并过程实际检索对象之前立即被垃圾回收,可能会导致错误。
    此更改也回溯到:1.1.14
    参考:#4069
  • [orm] [bug]
    修复了一个 bug,当undefer_group()选项不被识别时,如果它是从使用联合急加载加载的关系扩展的。此外,由于该错误导致额外的工作被执行,Python 函数调用计数也在结果集列的初始计算中提高了 20%,这与#3915的联合急加载改进相辅相成。
    这个改变也被回溯到了:1.1.14
    参考文献:#4048
  • [orm] [bug]
    修复了Session.merge()中的一个 bug,当集合中的对象的主键属性设置为None时,通常是自动增量的键,则会将其视为数据库持久化键的一部分,用于内部去重处理过程,导致只有一个对象实际上被插入数据库。
    这个改变也被回溯到了:1.1.14
    参考文献:#4056
  • [orm] [bug]
    当对一个不是针对MapperProperty的属性(例如关联代理)使用synonym()时,会引发InvalidRequestError。以前,尝试定位不存在的属性时会导致递归溢出。
    这个改变也被回溯到了:1.1.14
    参考文献:#4067
  • [orm] [bug]
    由于#3934引入的 1.2.0b1 中的回归已修复,即使回滚失败(目标问题是当 MySQL 丢失 SAVEPOINT 时),Session也不会“停用”事务。这将导致对Session.rollback()的后续调用再次引发错误,而不是完成并将Session带回 ACTIVE 状态。
    参考文献:#4050
  • [orm] [bug]
    修复了make_transient_to_detached()函数的问题,该函数会使目标对象上的所有属性过期,包括“延迟加载”属性,导致属性在下一次刷新时被取消延迟加载,从而导致属性意外加载。
    参考文献:#4084
  • [orm] [bug]
    修复了涉及删除孤立级联的错误,其中相关项目在父对象成为会话的一部分之前变为孤立状态,但仍然被跟踪为进入孤立状态,结果是它被从会话中删除而不是被刷新。
    注意
    这个修复在 1.2.0b3 版本中被无意中合并,并且在那个时候没有被添加到更改日志中。这个更改日志记录是作为 1.2.13 版本的一部分进行了补充的。
    参考:#4040
  • [orm] [bug]
    修复了“selectin”多态加载,使用单独的 IN 查询加载子类中的错误,该错误阻止了多级类层次结构中的“selectin”和“inline”设置按预期进行交互。
    参考:#4026
  • [orm] [bug]
    移除了当映射器和加载器策略所使用的  LRU  缓存达到阈值时发出的警告;最初该警告的目的是防止生成过多的缓存键,但后来基本上成为了对“创建许多引擎”反模式的检查。尽管这仍然是一个反模式,但存在同时为每个测试创建一个引擎并且在所有警告上引发的测试套件将是一个不便;这种测试套件不应该因为这个警告而改变它们的架构(尽管每个测试一个引擎的套件总是更好)。
    参考:#4071
  • [orm] [bug]
    修复了一个回归,其中在与延迟加载关系选项结合使用undefer_group()选项时,由于在 1.2 中作为#3954的一部分添加的 SQL 缓存键生成中存在错误,导致属性错误。
    参考:#4049
  • [orm] [bug]
    修改了在#3366中对  ORM  更新/删除评估器所做的更改,以便如果更新或删除中存在未映射的列表达式,并且评估器可以将其名称与目标类的映射列相匹配,则发出警告,而不是引发  UnevaluatableError。这基本上是 1.2  版本之前的行为,目的是允许正在依赖此模式的应用程序进行迁移。然而,如果给定的属性名称无法与映射器的列匹配,则仍然会引发  UnevaluatableError,这是在#3366中修复的问题。
    参考:#4073

orm 声明性

  • [orm] [declarative] [bug]
    如果子类试图覆盖在父类上使用 @declared_attr.cascading 声明的属性,则会发出警告,表明覆盖的属性将被忽略。这种用法不能完全支持到更进一步的子类,需要更复杂的开发工作,因此为了一致性,无论覆盖属性如何,都会一直遵循“级联”一直下去。
    参考:#4091
  • [orm] [declarative] [bug]
    如果 @declared_attr.cascading 属性与特殊的声明性名称(例如 __tablename__)一起使用,则会发出警告,因为这没有效果。
    参考:#4092

engine

  • [engine] [feature]
    ResultProxy添加了__next__()next()方法,以便直接在对象上使用next()内置函数。ResultProxy长期以来已经有了__iter__()方法,它已经允许它响应iter()内置函数。__iter__()的实现没有改变,因为性能测试表明,使用带有StopIteration__next__()方法进行迭代在 Python 2.7 和 3.6 中都慢约 20%。
    参考:#4077
  • [engine] [bug]
    PoolConnection进行了一些调整,以便在 pool.EmptyAttributeError 的异常捕获下不运行恢复逻辑,因为当恢复操作本身失败时,Python 3 会创建一个误导性的堆栈跟踪,将 Empty / AttributeError 误认为是原因,而实际上这些异常捕获是控制流的一部分。
    参考:#4028

sql

  • [sql] [bug]
    修复了最近添加的ColumnOperators.any_()ColumnOperators.all_()方法在被调用为方法时不起作用的错误,与使用独立函数any_()all_()相反。还为这些相对不直观的 SQL 操作添加了文档示例。
    这个更改也回溯到:1.1.15
    参考:#4093
  • [sql] [bug]
    添加了一个新的方法 DefaultExecutionContext.get_current_parameters(),用于在基于函数的默认值生成器中检索传递给语句的当前参数。新函数与 DefaultExecutionContext.current_parameters 属性不同之处在于,它还提供了对与多值“插入”构造相对应的参数的可选分组。以前不可能确定与函数调用相关的参数子集。
    另请参阅
    多值插入的参数辅助工具带有上下文默认生成器
    上下文敏感的默认函数
    参考:#4075
  • [sql] [bug]
    修复了新 SQL 注释功能中的错误,其中在使用 Table.tometadata() 时,表和列注释不会被复制。
    参考:#4087
  • [sql] [bug]
    在 1.1 版本中,Boolean 类型存在问题,即在没有“本地布尔值”的后端中,通过 bool() 进行布尔强制转换,但在本地布尔后端中不会发生,这意味着字符串 "0" 现在的行为不一致。经过投票,达成共识,即非布尔值应该引发错误,特别是在字符串 "0" 的模糊情况下;因此,如果传入值不在 None, True, False, 1, 0 范围内,Boolean 数据类型现在会引发 ValueError
    另请参阅
    布尔数据类型现在强制使用严格的 True/False/None 值
    参考:#4102
  • [sql] [bug]
    优化了Operators.op()的行为,使得在所有情况下,如果Operators.op.is_comparison标志设置为 True,则结果表达式的返回类型将是Boolean,如果标志为 False,则结果表达式的返回类型将与左侧表达式的类型相同,这是其他运算符的典型默认行为。还添加了一个新参数Operators.op.return_type以及一个辅助方法Operators.bool_op()
    参见
    自定义运算符的类型行为已经变得一致
    参考:#4063
  • [sql] [错误]
    EnumIntervalBoolean类型进行内部优化,现在它们都扩展了一个名为Emulated的通用混合类型,表示提供了对数据库原生类型的 Python 端模拟,在使用支持的后端时切换到数据库原生类型。直接使用 PostgreSQL 的INTERVAL类型现在将包括正确的类型强制转换规则,这些规则也适用于Interval(例如将日期添加到间隔会产生日期时间)。
    参考:#4088

postgresql

  • [postgresql] [功能]
    向 psycopg2 方言添加了一个新标志use_batch_mode。当Engine调用cursor.executemany()时,此标志启用了 psycopg2 的psycopg2.extras.execute_batch扩展。这个扩展在批量运行 INSERT 语句时提供了关键的性能提升,性能提升超过一个数量级。该标志默认为 False,因为目前被认为是实验性的。
    参见
    批处理模式/快速执行助手的支持
    参考:#4109
  • [postgresql] [错误]
    进一步修复了与 COLLATE 结合使用的 ARRAY 类中的问题,因为在 #4006 中进行的修复未能适应多维数组。
    这个更改也被回溯到:1.1.15
    参考:#4006
  • [postgresql] [bug]
    修复了array_agg函数中的错误,其中传递一个已经是ARRAY类型的参数,例如 PostgreSQL array 构造,会产生ValueError,因为函数尝试嵌套数组。
    这个更改也被回溯到:1.1.15
    参考:#4107
  • [postgresql] [bug]
    修复了 PostgreSQL Insert.on_conflict_do_update() 中的错误,该错误将阻止将插入语句用作 CTE,例如通过 Insert.cte(),在另一个语句中。
    这个更改也被回溯到:1.1.15
    参考:#4074
  • [postgresql] [bug]
    修复了 pg8000 驱动程序在使用带有模式名称的 MetaData.reflect() 时会失败的错误,因为模式名称将作为“quoted_name”对象发送,该对象是一个字符串子类,pg8000 不识别。在连接时,quoted_name 类型被添加到 pg8000 的 py_types 集合中。
    参考:#4041
  • [postgresql] [bug]
    为 pg8000 驱动程序启用了 UUID 支持,支持此数据类型的本机 Python uuid 往返。但是仍然不支持 UUID 数组。
    参考:#4016

mysql

  • [mysql] [bug]
    当检测到 MariaDB 10.2.8 或更早版本的 10.2 系列时发出警告,因为这些版本中的 CHECK 约束存在重大问题,这些问题在 10.2.9 中已解决。
    请注意,此更改日志消息未随 SQLAlchemy 1.2.0b3 一起发布,而是事后添加的。
    这个更改也被回溯到:1.1.15
    参考:#4097
  • [mysql] [bug]
    修复了在 MariaDB 10.2 系列中 CURRENT_TIMESTAMP 由于语法更改而无法正确反映的问题,其中该函数现在表示为 current_timestamp()
    这个更改也被回溯到:1.1.15
    参考:#4096
  • [mysql] [bug]
    MariaDB 10.2 现在支持 CHECK 约束(警告:由于上游问题,请使用版本 10.2.9 或更高版本,详见#4097)。反射现在在存在时考虑这些 CHECK 约束,当它们出现在SHOW CREATE TABLE输出中时。
    此更改也被回溯到:1.1.15
    参考:#4098
  • [mysql] [bug]
    将新的 MySQL INSERT…ON DUPLICATE KEY UPDATE 构造的.values属性的名称更改为.inserted,因为Insert已经有一个名为Insert.values()的方法。.inserted属性最终呈现 MySQL 的VALUES()函数。
    参考:#4072

sqlite

  • [sqlite] [bug]
    修复了一个 bug,当 SQLite 的 CHECK 约束反射失败时,如果引用的表在远程模式下,例如在 SQLite 中由 ATTACH 引用的远程数据库,则会失败。
    此更改也被回溯到:1.1.15
    参考:#4099

mssql

  • [mssql] [feature]
    添加了一个新的TIMESTAMP数据类型,它在 SQL Server 中正确地像二进制数据类型一样工作,而不是一个 datetime 类型,因为 SQL Server 在这里违反了 SQL 标准。还添加了ROWVERSION,因为 SQL Server 中的TIMESTAMP类型已被弃用,改用 ROWVERSION。
    参考:#4086
  • [mssql] [feature]
    添加了对“AUTOCOMMIT”隔离级别的支持,通过Connection.execution_options()在 PyODBC 和 pymssql 方言中建立。此隔离级别在底层连接对象上设置适当的 DBAPI 特定标志。
    参考:#4058
  • [mssql] [bug]
    为 SQL Server 的 PyODBC 方言添加了完整的“连接关闭”异常代码范围,包括‘08S01’、‘01002’、‘08003’、‘08007’、‘08S02’、‘08001’、‘HYT00’、‘HY010’。以前只覆盖了‘08S01’。
    此更改也被回溯到:1.1.15
    参考:#4095
  • [mssql] [bug]
    SQL Server 支持 SQLAlchemy 称为“本地布尔”的 BIT 类型,因为该类型只接受 0 或 1,而 DBAPI 将其值返回为 True/False。因此,SQL Server 方言现在启用了“本地布尔”支持,即不为Boolean数据类型生成 CHECK 约束。与其他本地布尔的唯一区别是没有“true” / “false”常量,因此这里仍然呈现为“1”和“0”。
    参考:#4061
  • [mssql] [bug]
    修复了 pymssql 方言中 SQL 文本中的百分号,例如在模数表达式或文字值中使用的情况,不会加倍,这似乎是 pymssql 所期望的。尽管 pymssql DBAPI 使用“pyformat”参数样式,该样式认为百分号是重要的。
    参考:#4057
  • [mssql] [bug]
    修复了 SQL Server 方言在反射自引用外键约束时可能从多个模式中提取列的错误,如果多个模式包含相同名称的约束针对相同名称的表。
    参考:#4060
  • [mssql] [bug] [orm]
    为特定于“RETURNING”的方言添加了一个新类别的“rowcount  支持”,在 SQL Server 上看起来像“OUTPUT inserted”,因为 PyODBC 后端在 OUTPUT 生效时无法给我们  UPDATE 或 DELETE 语句的 rowcount。这主要影响 ORM,当 flush  更新包含服务器计算值的行时,如果后端没有返回预期的行数,会引发错误。PyODBC 现在声明支持 rowcount,除非存在  OUTPUT.inserted,ORM 在 flush 期间会考虑是否寻找 rowcount。
    参考:#4062
  • [mssql] [bug] [orm]
    为 pymssql 方言启用了“sane_rowcount”标志,表示 DBAPI 现在报告 UPDATE 或 DELETE 语句受影响的正确行数。这主要影响 ORM 版本功能,因为它现在可以验证目标版本受影响的行数。
  • [mssql] [bug]
    添加了一个规则到 SQL Server 索引反射中,忽略了在未指定聚集索引的表上隐式存在的所谓“堆”索引。
    参考:#4059

oracle

  • [oracle] [performance] [bug] [py2k]
    由于修复#3937导致的性能回归已经修复,其中 cx_Oracle 自版本 5.3 起从其命名空间中删除了.UNICODE符号,这被解释为  cx_Oracle 的“WITH_UNICODE”模式被无条件地打开,从而在 SQLAlchemy 端调用函数将所有字符串无条件地转换为  unicode 并导致性能影响。实际上,根据 cx_Oracle 的作者,“WITH_UNICODE”模式自 5.1 起已被完全移除,因此昂贵的  unicode 转换函数不再必要,如果在 Python 2 下检测到 cx_Oracle 5.1 或更高版本,则会被禁用。已恢复在#3937中删除的“WITH_UNICODE”模式警告。
    此更改也被回溯到:1.1.13,1.0.19
    参考:#4035
  • [oracle] [bug]
    使用 cx_Oracle 实现对 Oracle 值“infinity”的部分支持,仅使用 Python 浮点值,例如float("inf")。cx_Oracle DBAPI 驱动程序尚未实现十进制支持。
    参考:#4064
  • [oracle] [bug]
    cx_Oracle  方言已经重新设计和现代化,以利用旧的 4.x 系列 cx_Oracle 中不存在的新模式。其中包括最小的 cx_Oracle 版本是 5.x  系列,cx_Oracle 6.x 现在已经完全测试。最重要的变化涉及类型转换,主要是关于数字/浮点和 LOB 数据类型,更有效地利用  cx_Oracle 类型处理挂钩简化了绑定参数和结果数据的处理方式。
    参见
    cx_Oracle 方言,类型系统的重大重构
  • [oracle] [bug]
    对于所有版本的  cx_Oracle,两阶段支持已完全移除,而在 1.2.0b1 中,此更改仅对 cx_Oracle 的 6.x 系列生效。这个功能在任何版本的  cx_Oracle 中都从未正确工作,在 cx_Oracle 6.x 中,SQLAlchemy 依赖的 API 已被移除。
    参见
    cx_Oracle 方言,类型系统的重大重构
    参考:#3997
  • [oracle] [bug]
    当使用 cx_Oracle 后端的Insert.returning()时,结果集中的列键现在使用正确的列/标签名称,与所有其他方言一样。以前,这些列键会显示为ret_nnn
    参见
    cx_Oracle 方言,类型系统的重大重构
  • [oracle] [bug]
    cx_Oracle 方言的几个参数现在已被弃用且不再起作用:auto_setinputsizesexclude_setinputsizesallow_twophase
    参见
    对 cx_Oracle 方言、类型系统的重大重构
  • [oracle] [bug]
    修复了在 Oracle 下反映出一个类似“column DESC”的表达式的索引不会被返回的错误,如果表也没有主键,这是由于尝试过滤掉 Oracle 隐式添加到主键列上的索引的逻辑导致的。
    参考:#4042
  • [oracle] [bug]
    修复了由  cx_Oracle 6.0 引起的更多回归问题;目前,用户唯一的行为变化是断开检测现在除了 cx_Oracle.InterfaceError  外还检测 cx_Oracle.DatabaseError,因为这种行为似乎已经改变。其他关于数字精度和无法关闭连接的问题仍在上游  cx_Oracle 问题跟踪器中挂起。
    参考:#4045
  • [oracle] [bug]
    修复了 Oracle 8“非 ansi”连接模式不会向使用与=操作符不同的操作符的表达式添加(+)运算符的错误。(+)需要添加到右侧的所有列。
    参考:#4076

1.2.0b2

发布日期:2017 年 7 月 24 日

orm

  • [orm] [bug]
    修复了从 1.1.11 开始的回归,其中向包含具有子查询加载关系的实体的查询添加额外的非实体列会失败,这是由于 1.1.11 中添加的检查导致的,这是由于#4011
    这个更改也被回溯到:1.1.12
    参考:#4033
  • [orm] [bug]
    修复了在 1.1 中添加的涉及 JSON NULL 评估逻辑的错误,其中逻辑不会适应与Column不同命名的 ORM 映射属性。
    这个更改也被回溯到:1.1.12
    参考:#4031
  • [orm] [bug]
    WeakInstanceDict中的所有方法中添加了KeyError检查,其中在检查key in dict后紧接着对该键进行索引访问,以防止在负载下垃圾收集导致的竞争中,代码假定键存在后,键从字典中被移除,导致非常罕见的KeyError引发。
    这个更改也被回溯到:1.1.12
    参考:#4030

测试

  • [tests] [bug] [py3k]
    修复了与 Python 3.6.2 的更改不兼容的测试固定装置中的问题,涉及上下文管理器。
    这个更改也被回溯到:1.1.12, 1.0.18
    参考:#4034

orm

  • [orm] [bug]
    修复了从 1.1.11 开始的回归,其中向包含具有子查询加载关系的实体的查询添加额外的非实体列将失败,原因是 1.1.11 中添加的检查作为#4011的结果。
    此更改还回溯到:1.1.12
    参考:#4033
  • [orm] [错误]
    修复了在 1.1 中添加的涉及 JSON NULL 评估逻辑的错误,该逻辑不会适应与Column不同命名的 ORM 映射属性的情况。
    此更改还回溯到:1.1.12
    参考:#4031
  • [orm] [错误]
    WeakInstanceDict中的所有方法中添加了KeyError检查,其中检查key in dict后跟随对该键的索引访问,以防止在负载下垃圾收集导致的竞争中,代码假设其存在后,将键从字典中移除,导致非常罕见的KeyError引发。
    此更改还回溯到:1.1.12
    参考:#4030

测试

  • [测试] [错误] [py3k]
    修复了与 Python 3.6.2 的更改不兼容的测试固定装置中的问题,涉及上下文管理器的更改。
    此更改还回溯到:1.1.12, 1.0.18
    参考:#4034


SqlAlchemy 2.0 中文文档(六十一)(5)https://developer.aliyun.com/article/1560913

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十四)(3)
SqlAlchemy 2.0 中文文档(六十四)
10 0
|
3天前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十四)(1)
SqlAlchemy 2.0 中文文档(六十四)
10 0
|
3天前
|
关系型数据库 测试技术 API
SqlAlchemy 2.0 中文文档(二十八)(3)
SqlAlchemy 2.0 中文文档(二十八)
9 1
|
3天前
|
SQL 缓存 API
SqlAlchemy 2.0 中文文档(二十八)(4)
SqlAlchemy 2.0 中文文档(二十八)
12 1
|
3天前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十一)(5)
SqlAlchemy 2.0 中文文档(六十一)
7 0
|
3天前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十一)(2)
SqlAlchemy 2.0 中文文档(六十一)
11 0
|
3天前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十一)(1)
SqlAlchemy 2.0 中文文档(六十一)
12 0
|
3天前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十一)(3)
SqlAlchemy 2.0 中文文档(六十一)
10 0
|
3天前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十四)(2)
SqlAlchemy 2.0 中文文档(六十四)
9 0
|
3天前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十四)(4)
SqlAlchemy 2.0 中文文档(六十四)
9 0