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

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

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


1.1.0b2

发布日期:2016 年 7 月 1 日

sql

  • [sql] [bug]
    修复了 SQL 数学否定运算符的问题,其中表达式的类型将不再是原始的数字类型。这将导致类型确定结果集行为的问题。
    此更改也被回溯至:1.0.14
    参考资料:#3735
  • [sql] [bug]
    修复了 sqlalchemy.util.Properties 的 __getstate__ / __setstate__ 方法由于 1.0 系列转换到 __slots__ 导致的无法工作的 bug。该问题可能会影响一些第三方应用程序。感谢 Pieter Mulder 提供的拉取请求。
    此更改也被回溯至:1.0.14
    参考资料:#3728
  • [sql] [bug]
    仅包含整数类型的后端的 Boolean 数据类型的处理在纯 Python 和 C 扩展版本之间已经保持一致,C 扩展版本将接受来自数据库的任何整数值作为布尔值,而不仅仅是零和一;此外,发送到数据库的非布尔整数值将被强制转换为精确的零或一,而不是作为原始整数值传递。
    参见
    非本地布尔整数值在所有情况下被强制转换为零/一/无
    参考:#3730
  • [sql] [bug]
    Enum中稍微回滚了验证规则,以允许未知字符串值通过,除非向 Enum���递了标志validate_string=True;当然,任何其他类型的对象仍然被拒绝。虽然立即使用是为了允许与 LIKE 枚举进行比较,但存在这种用法表明可能存在更多未知字符串比较用例,这暗示可能还有一些未知字符串插入用例。
    参考:#3725

postgresql

  • [postgresql] [bug] [ext]
    sqlalchemy.ext.compiler扩展中进行了轻微的行为更改,如果已建立的构造的编译方案没有自己专用的__visit_name__,则会将其删除。这在 1.0 中很少发生,但在 1.1 中,ARRAY子类ARRAY并具有此行为。因此,为其他方言(如 SQLite)设置编译处理程序将使主ARRAY对象不再可编译。
    参考:#3732

mysql

  • [mysql] [bug]
    在不再为具有 AUTO_INCREMENT 的复合主键生成隐式 KEY 中稍微减少了“按照自动增量排序主键列”的描述,因此如果PrimaryKeyConstraint被明确定义,列的顺序将被保持完全一致,允许在必要时控制此行为。
    参考:#3726

1.1.0b1

发布日期:2016 年 6 月 16 日

orm

  • [orm] [feature] [ext]
    添加了一个新的 ORM 扩展 Indexable,允许构建引用“索引”结构的特定元素的 Python 属性,例如数组和 JSON 字段。感谢 Jeong YunWon 的拉取请求。
    另请参阅
    新的可索引 ORM 扩展
  • [orm] [feature]
    添加了新标志 Session.bulk_insert_mappings.render_nulls,它允许使用 NULL 值进行 ORM 批量 INSERT;这将绕过服务器端默认值,但允许使用相同的列集形成所有语句,从而使它们可以批处理。由 Tobias Sauerwein 提供的拉取请求。
  • [orm] [功能]
    添加了新事件 AttributeEvents.init_scalar(),以及一个新的示例套件,说明了其用法。此事件可用于在对象持久化之前为 Python 端的属性提供由 Core 生成的默认值。
    请参见
    新的 init_scalar() 事件拦截 ORM 级别的默认值
    参考:#1311
  • [orm] [功能]
    添加了 AutomapBase.prepare.schemaAutomapBase.prepare() 方法,以指示应从哪个模式中反映表,如果不是默认模式。由 Josh Marlow 提供的拉取请求。
  • [orm] [功能]
    添加了新参数 mapper.passive_deletes 到可用的映射器选项。这允许针对基表的联合表继承映射进行 DELETE 操作,同时允许 ON DELETE CASCADE 处理从子类表中删除行。
    请参见
    对于联合继承映射的被动删除功能
    参考:#2349
  • [orm] [功能]
    对核心  SQL 结构调用 str() 方法已经变得更加“友好”,当结构包含非标准 SQL 元素时,例如  RETURNING、数组索引操作或方言特定或自定义数据类型时。在这些情况下,将返回一个字符串,呈现出结构的近似值(通常是其 PostgreSQL  风格版本),而不是引发错误。
    请参见
    没有方言的核心 SQL 结构的“友好”字符串化
    参考:#3631
  • [orm] [功能]
    对于Querystr()调用现在将考虑Session绑定的Engine,在生成 SQL 的字符串形式时,以便显示将要发送到数据库的实际 SQL,如果可能的话。以前,只有与映射相关联的MetaData的引擎会被使用,如果存在的话。如果无法在Session或与映射相关联的MetaData上找到绑定,则使用“默认”方言来呈现 SQL,就像以前一样。
    另请参阅
    查询的字符串化将查询会话以获取正确的方言
    参考:#3081
  • [orm] [功能]
    SessionEvents套件现在包括事件,允许对所有对象生命周期状态转换进行明确跟踪,以Session本身为基础,例如挂起、瞬态、持久、分离。每个事件中对象的状态也被定义。
    另请参阅
    新会话生命周期事件
    参考:#2677
  • [orm] [功能]
    添加了一个新的会话生命周期状态 deleted。这个新状态表示一个已从 persistent 状态中删除的对象,一旦事务提交,将转移到 detached 状态。这解决了长期存在的问题,即被删除的对象存在于持久和分离之间的灰色区域。InstanceState.persistent访问器不再将已删除对象报告为持久;相反,这些对象的InstanceState.deleted访问器将为 True,直到它们变为分离状态。
    另请参阅
    新会话生命周期事件
    参考:#2677
  • [orm] [功能]
    添加了对将映射类或映射实例传递到被解释为 SQL 绑定参数的上下文的常见错误情况的新检查;为此引发了新异常。
    另请参阅
    为传递映射类、实例作为 SQL 文字添加了具体检查
    参考:#3321
  • [orm] [功能]
    添加了新的关系加载策略raiseload()(也可通过lazy='raise'访问)。这个策略几乎像noload()一样工作,但是它不是返回None而是引发一个 InvalidRequestError。拉取请求由 Adrian Moennich 提供。
    另请参阅
    新的“raise” / “raise_on_sql”加载器策略
    参考:#3512
  • [orm] [变更]
    Mapper.order_by 参数已被弃用。这是一个旧参数,与 SQLAlchemy 的工作方式不再相关,一旦引入了查询对象。通过弃用它,我们确立了我们不支持不起作用的用例,并鼓励应用程序摆脱使用该参数的做法。
    另请参阅
    Mapper.order_by 已弃用
    参考:#3394
  • [orm] [变更]
    Session.weak_identity_map 参数已被弃用。请参阅 Session Referencing Behavior 中的新方案,使用基于事件的方法来维护强身份映射行为。
    另请参阅
    新的会话生命周期事件
    参考:#2677
  • [orm] [错误]
    修复了一个问题,即将对象从一个父对象更改为另一个父对象的多对一更改可能与未刷新的外键属性的修改结合使用时工作不一致的问题。现在,属性移动考虑了外键的数据库提交值,以定位正在移动的对象的“以前”父对象。这样可以正确触发事件,包括反向引用事件。以前,这些事件并不总是会触发。可能依赖于先前损坏行为的应用可能会受到影响。
    另请参阅
    修复了涉及由用户启动的外键操纵的多对一对象移动的问题
    参考:#3708
  • [orm] [错误]
    修复了一个 bug,即当使用session.merge(obj, load=False)将对象合并到会话中时,延迟列可能会意外地设置为在下一个对象范围内取消过期时进行数据库加载。
    参考:#3488
  • [orm] [错误] [mysql]
    进一步延续了关于 MySQL 常见异常情况的讨论,即在#2696中首次涵盖的保存点首先被取消的情况,当 SAVEPOINT 在回滚之前消失时,Session所处的失败模式已经得到改进,以允许Session在该保存点之外继续运行。假定保存点操作失败并被取消。
    另请参阅
    数据库取消 SAVEPOINT 时改进的 Session 状态
    参考:#3680
  • [orm] [bug]
    修复了一个 bug,即新插入的实例如果被回滚,仍可能在下一个事务中引起持久性冲突,因为实例未被检查是否已过期。此修复将解决一大类错误地导致“具有标识 X 的新实例与持久实例 Y 冲突”的情况。
    另请参阅
    修复了错误的“新实例 X 与持久实例 Y 冲突”刷新错误
    参考:#3677
  • [orm] [bug]
    Query.correlate()的工作方式进行了改进,以便在使用代表多个表直接连接的“多态”实体时,语句将确保连接中的所有表都是相关的。
    另请参阅
    改进了具有多态实体的 Query.correlate 方法
    参考:#3662
  • [orm] [bug]
    修复了一个 bug,该 bug 会导致一个急切加载的多对一属性不被加载,如果连接的急切加载来自一个行,其中同一实体多次出现,有些要求属性急切加载,而其他则不需要。这里的逻辑被修改为即使不同的加载路径已经处理了父实体,也要考虑属性。
    另请参阅
    在一行中同一实体多次出现时的连接急切加载
    参考:#3431
  • [orm] [bug]
    对于Query.distinct()Query.order_by()组合时向生成的  SQL 添加列的逻辑进行了改进,使得已经存在的列不会被第二次添加,即使它们使用不同名称标记。尽管有这个改变,SQL  中添加的额外列从未在最终结果中返回,因此这个改变只影响语句的字符串形式以及在核心执行上下文中使用时的行为。此外,当使用 DISTINCT ON  格式时,不再添加列,前提是查询没有由于连接的急加载而包装在子查询中。
    另请参阅
    使用 DISTINCT + ORDER BY 不再冗余添加列
    参考:#3641
  • [orm] [bug]
    修复了两个同名关系引用基类和具体继承子类时,如果这些关系是使用“backref”设置的,那么会引发错误,而使用 relationship()设置相同配置的情况下,使用冲突名称将成功,就像在具体映射的情况下允许的那样。
    另请参阅
    应用于具体继承子类时,同名 backrefs 不会引发错误
    参考:#3630
  • [orm] [bug]
    Session.merge()方法现在在发出 INSERT 之前通过主键跟踪待处理对象,并在遇到具有重复主键的不同对象时将它们合并在一起,这在最好的情况下基本上是半确定性的。这种行为与持久对象已经发生的情况相匹配。
    另请参阅
    Session.merge 解决待处理冲突与持久对象相同
    参考:#3601
  • [orm] [bug]
    修复了在某些不适当情况下,例如在从单继承子类的 exists()查询时,会将“单表继承”标准添加到查询末尾的错误。
    另请参阅
    进一步修复单表继承查询
    参考:#3582
  • [orm] [bug]
    添加了一个新的类型级别修饰符TypeEngine.evaluates_none(),指示 ORM 应将一组正值的 None 持久化为值 NULL,而不是在 INSERT 语句中省略列。此功能既用作#3514的实现的一部分,也作为任何类型可用的独立功能。
    另请参阅
    允许显式持久化 NULL 覆盖默认值的新选项
    参考:#3250
  • [orm] [bug]
    Session.bulk_save_objects()和相关批量方法内部调用的“簿记”功能已经减少到目前未使用的程度,例如在 INSERT 或 UPDATE 语句之后获取列默认值的检查。
    参考:#3526
  • [orm] [bug] [postgresql]
    关于与 PostgreSQL JSON 类型一起使用值None的附加修复已经完成。当JSON.none_as_null标志保持默认值False时,ORM 现在将正确地在 ORM 对象上的值设置为None或在Session.bulk_insert_mappings()中使用值None时,将 JSON 的“‘null’”字符串插入到列中,包括如果列上有默认值或服务器默认值。
    另请参阅
    JSON“null”在 ORM 操作中按预期插入,在不存在时被省略
    允许显式持久化 NULL 覆盖默认值的新选项
    参考:#3514

engine

  • [engine] [feature]
    添加了连接池事件ConnectionEvents.close()ConnectionEvents.detach()ConnectionEvents.close_detached()
  • [engine] [feature]
    用于日志记录、异常和repr()目的的所有绑定参数集和结果行的字符串格式化现在在每个集合中截断非常大的标量值,包括“N 个字符被截断”注释,类似于大型多参数集本身被截断的显示方式。
    另请参阅
    在日志和异常显示中截断大型参数和行值
    参考:#2837
  • [engine] [feature]
    Table对象添加了多租户模式翻译。这支持应用程序在许多模式中使用相同的Table对象的用例,例如每个用户一个模式。添加了一个新的执行选项Connection.execution_options.schema_translate_map
    另请参阅
    Table 对象的多租户模式翻译
    参考:#2685
  • [engine] [feature]
    为引擎添加了新的入口系统,允许在 URL 的查询字符串中声明“插件”。可以编写自定义插件,这些插件将有机会在前期修改和/或使用引擎的 URL 和关键字参数,然后在引擎创建时将获得引擎本身以允许进行额外的修改或事件注册。插件被编写为CreateEnginePlugin的子类;请参阅该类以获取详细信息。
    参考:#3536

sql

  • [sql] [feature]
    通过新的FromClause.tablesample()方法和独立函数添加了 TABLESAMPLE 支持。感谢 Ilja Everilä的拉取请求。
    另请参阅
    支持 TABLESAMPLE
    参考:#3718
  • [sql] [feature]
    支持窗口函数中的范围,使用over.range_over.rows参数。
    另请参阅
    支持窗口函数中的 RANGE 和 ROWS 规范
    参考:#3049
  • [sql] [feature]
    实现了 SQLite 和 PostgreSQL 的 CHECK 约束的反射。可以通过新的检查器方法Inspector.get_check_constraints()以及在反射Table对象时以CheckConstraint对象的形式存在于约束集合中。感谢 Alex Grönholm 的拉取请求。
  • [sql] [feature]
    新增ColumnOperators.is_distinct_from()ColumnOperators.isnot_distinct_from()操作符;感谢 Sebastian Bank 的拉取请求。
    另请参阅
    IS DISTINCT FROM 和 IS NOT DISTINCT FROM 的支持
  • [sql] [功能]
    DDLCompiler.visit_create_table()中增加了一个名为DDLCompiler.create_table_suffix()的钩子,允许自定义方言在“CREATE TABLE”子句之后添加关键字。感谢 Mark Sandan 的拉取请求。
  • [sql] [功能]
    负整数索引现在由ResultProxy返回的行支持。感谢 Emanuele Gaifas 的拉取请求。
    另请参阅
    核心结果行支持负整数索引
  • [sql] [功能]
    增加了Select.lateral()和相关构造,以允许使用 SQL 标准的 LATERAL 关键字,目前仅受 PostgreSQL 支持。
    另请参阅
    SQL LATERAL 关键字的支持
    参考:#2857
  • [sql] [功能]
    增加了对“FULL OUTER JOIN”在 Core 和 ORM 中的渲染支持。感谢 Stefan Urbanek 的拉取请求。
    另请参阅
    核心和 ORM 支持 FULL OUTER JOIN
    参考:#1957
  • [sql] [功能]
    CTE 功能已扩展到支持所有 DML,允许 INSERT、UPDATE 和 DELETE 语句指定自己的 WITH 子句,以及当这些语句包含 RETURNING 子句时,这些语句本身也可以是 CTE 表达式。
    另请参阅
    CTE 支持 INSERT、UPDATE、DELETE
    参考:#2551
  • [sql] [功能]
    增加了对 PEP-435 风格的枚举类的支持,即 Python 3 的enum.Enum类,但也包括兼容的枚举库,到Enum数据类型。Enum数据类型现在还在 Python 中验证传入值,并添加了一个选项来避免创建 CHECK 约束Enum.create_constraint。感谢 Alex Grönholm 的拉取请求。
    另请参阅
    支持 Python 的原生枚举类型和兼容形式
    Enum 类型现在在 Python 中验证值
    参考:#3095, #3292
  • [sql] [feature]
    对最近添加的 TextClause.columns()  方法以及其与结果行处理的交互进行了深度改进,现在允许将传递给该方法的列与语句中的结果列进行位置匹配,而不仅仅是根据名称匹配。这样做的好处包括,当将文本  SQL 语句链接到 ORM 或核心表模型时,无需进行常见列名的标记或去重,这也意味着无需担心标签名称如何与 ORM 列匹配等等。此外,ResultProxy 在某些情况下进一步增强,以更精确地将列和字符串键映射到行。
    另请参见
    ResultSet 列匹配增强;文本 SQL 的位置列设置 - 特性概述
    TextClause.columns() 将按位置而不是按名称匹配列 - 向后兼容性备注
    参考:#3501
  • [sql] [feature]
    在核心中添加了一个新类型 JSON。这是 PostgreSQL 的基础 JSON 类型以及新 JSON 类型的基础,因此可以使用 PG/MySQL 不可知的 JSON 列。该类型具有基本的索引和路径搜索支持。
    另请参见
    Core 添加了对 JSON 的支持
    参考:#3619
  • [sql] [feature]
    添加了对形式为 WITHIN GROUP (ORDER BY ) 的“set-aggregate”函数的支持,使用方法 FunctionElement.within_group()。已添加一系列常见的 set-aggregate 函数,其返回类型从集合派生。这包括像 percentile_contdense_rank 等函数。
    另请参见
    新的功能特性,“WITHIN GROUP”、“array_agg”和集合聚合函数
    参考:#1370
  • [sql] [feature] [postgresql]
    增加了对 SQL 标准函数 array_agg 的支持,该函数会自动返回正确类型的 ARRAY 并支持索引/切片操作,还有 array_agg(),它返回一个带有额外比较功能的 ARRAY。由于目前只有 PostgreSQL 支持数组,因此只在 PostgreSQL 上有效。还新增了一个支持 PG 的“ORDER BY”扩展的新构造 aggregate_order_by
    另请参阅
    新函数功能,“WITHIN GROUP”,array_agg 和 set 聚合函数
    参考:#3132
  • [sql] [feature]
    在核心中新增了一个新类型 ARRAY。这是 PostgreSQL ARRAY 类型的基础,现在已经成为核心的一部分,以开始支持各种 SQL 标准的数组支持功能,包括一些函数和最终支持其他具有“数组”概念的数据库上的本地数组,如 DB2 或 Oracle。此外,还添加了新的运算符 any_()all_()。这些不仅支持 PostgreSQL 上的数组构造,还支持可在 MySQL 上使用的子查询(但遗憾的是在 PostgreSQL 上不可用)。
    另请参阅
    核心添加了数组支持;新增了 ANY 和 ALL 运算符
    参考:#3516
  • [sql] [change] [mysql]
    Column 认为自己是“自动增量”列的系统已更改,因此不再为具有复合主键的 Table 隐式启用自动增量。为了能够为复合主键成员列启用自动增量,同时保持 SQLAlchemy 长期以来为单个整数主键启用隐式自动增量的行为,已将第三状态添加到 Column.autoincrement 参数中 "auto",这现在是默认值。
    另请参阅
    不再为复合主键列隐式启用 .autoincrement 指令
    不再为具有 AUTO_INCREMENT 的复合主键生成隐式 KEY
    参考:#3216
  • [sql] [bug]
    FromClause.count() 已被弃用。该函数使用表中的任意列,并不可靠;对于 Core 使用,应优先使用 func.count()
    参考:#3724
  • [sql] [bug]
    修复了一个断言,如果一个与小写-t TableClause 关联的 Column 关联了一个 Index,则会不太恰当地引发;为了将索引与 Table 关联起来,应忽略该关联。
    参考:#3616
  • [sql] [bug]
    type_coerce() 构造现在是一个完全成熟的 Core 表达式元素,在编译时进行延迟评估。以前,该函数只是一个转换函数,通过返回一个 Label 或基于列的表达式的副本的 BindParameter 处理不同的表达式输入,特别是当 ORM 级别的表达式转换将列转换为绑定参数时(例如用于延迟加载)时,该操作无法被逻辑地维护。
    另请参阅
    type_coerce 函数现在是一个持久的 SQL 元素
    引用:#3531
  • [sql] [错误]
    TypeDecorator类型扩展现在将与SchemaType实现一起工作,通常是EnumBoolean,以确保从实现类型传播到外部类型的每个表事件。这些事件用于确保约束或 PostgreSQL 类型(例如 ENUM)与父表一起正确创建(可能删除)。
    另请参阅
    TypeDecorator 现在自动与 Enum、Boolean、“模式”类型配合工作
    引用:#2919
  • [sql] [错误]
    union()构造及相关构造如Query.union()现在处理嵌套的 SELECT 语句需要加括号的情况,因为它们包含 LIMIT、OFFSET 和/或 ORDER BY。这些查询在 SQLite 上不起作用,并且在该后端上会像以前一样失败,但现在应该在所有其他后端上起作用。
    另请参阅
    使用 LIMIT/OFFSET/ORDER BY 的 SELECT 的 UNION 或类似操作现在会给嵌套的 SELECT 加括号
    引用:#2528

模式

  • [模式] [增强]
    传递给Column对象的默认生成函数现在通过“update_wrapper”运行,或者如果传递了可调用的非函数,则通过等效函数运行,以便内省工具保留包装函数的名称和文档字符串。拉取请求由 hsum 提供。

postgresql

  • [postgresql] [功能]
    添加了对 PostgreSQL 的 INSERT…ON CONFLICT 的支持,使用了一个新的 PostgreSQL 特定的Insert对象。由 Robin Thomas 在此处进行了拉取请求和大量工作。
    另请参阅
    支持 INSERT…ON CONFLICT (DO UPDATE | DO NOTHING)
    引用:#3529
  • [postgresql] [功能]
    如果在Index上设置了postgresql_concurrently标志,并且检测到正在使用的数据库为  PostgreSQL 版本 9.2 或更高版本,则 DROP INDEX 的 DDL 将发出“CONCURRENTLY”。对于 CREATE  INDEX,还添加了数据库版本检测,如果 PG 版本低于 8.2,则将省略该子句。感谢 Iuri de Silvio 提供的拉取请求。
  • [postgresql] [功能]
    添加了新参数PGInspector.get_view_names.include,允许指定应返回哪种类型的视图。当前包括“plain”和“materialized”视图。感谢 Sebastian Bank 提供的拉取请求。
    参考:#3588
  • [postgresql] [功能]
    postgresql_tablespace作为参数添加到Index中,以允许在 PostgreSQL 中为索引指定 TABLESPACE。与Table上的同名参数相辅相成。感谢 Benjamin Bertrand 提供的拉取请求。
    参考:#3720
  • [postgresql] [功能]
    添加了新参数GenerativeSelect.with_for_update.key_share,它将在 PostgreSQL 后端上呈现FOR NO KEY UPDATE版本的FOR UPDATEFOR KEY SHARE,而不是FOR SHARE。感谢 Sergey Skopin 提供的拉取请求。
  • [postgresql] [功能] [oracle]
    添加了新参数GenerativeSelect.with_for_update.skip_locked,它将在 PostgreSQL 和 Oracle 后端上为FOR UPDATEFOR SHARE锁呈现SKIP LOCKED短语。感谢 Jack Zhou 提供的拉取请求。
  • [postgresql] [功能]
    为 PyGreSQL PostgreSQL 方言添加了一个新的方言。感谢 Christoph Zwerschke 和 Kaolin Imago Fire 的努力。
  • [postgresql] [功能]
    添加了一个新常量JSON.NULL,表示应使用 JSON NULL 值作为值,而不考虑其他设置。
    另请参阅
    新增 JSON.NULL 常量
    参考:#3514
  • [postgresql] [更改]
    长期弃用的sqlalchemy.dialects.postgres模块已被移除;多年来一直发出警告,项目应该调用sqlalchemy.dialects.postgresql。形式为postgres://的引擎 URL 仍将继续运行。
  • [postgresql] [错误]
    增加了对将物化视图源反射到Inspector.get_view_definition()方法的 PostgreSQL 版本的支持。
    参考:#3587
  • [postgresql] [bug]
    引用了一个引用EnumENUM子类型的ARRAY对象现在在类型在“CREATE TABLE”或“DROP TABLE”中使用时会发出预期的“CREATE TYPE”和“DROP TYPE” DDL。
    另请参阅
    带有 ENUM 的 ARRAY 现在将为 ENUM 发出 CREATE TYPE
    参考:#2729
  • [postgresql] [bug]
    特殊数据类型如ARRAYJSONHSTORE上的“可哈希”标志现在设置为 False,这允许在包含行内实体的 ORM 查询中获取这些类型。
    另请参阅
    关于“不可哈希”类型的更改,影响 ORM 行的去重
    ARRAY 和 JSON 类型现在正确指定“不可哈希”
    参考:#3499
  • [postgresql] [bug]
    PostgreSQL ARRAY 类型现在支持多维索引访问,例如表达式somecol[5][6],无需任何显式转换或类型强制转换,只要ARRAY.dimensions 参数设置为所需的维数即可。
    另请参阅
    正确的 SQL 类型来自于 ARRAY、JSON、HSTORE 的索引访问
    参考:#3487
  • [postgresql] [bug]
    当使用索引访问时,JSONJSONB 的返回类型已经修复,使其像 PostgreSQL 本身一样工作,并返回一个表达式,该表达式本身是类型为 JSONJSONB 的类型。之前,访问器会返回 NullType,这将禁止使用后续类似 JSON 的运算符。
    另请参阅
    从数组、JSON、HSTORE 的索引访问中建立正确的 SQL 类型
    参考:#3503
  • [postgresql] [bug]
    JSONJSONBHSTORE 数据类型现在允许完全控制从索引文本访问操作的返回类型,对于 JSON 类型使用 column[someindex].astext,对于 HSTORE 类型使用 column[someindex],通过 JSON.astext_typeHSTORE.text_type 参数。
    另请参阅
    从数组、JSON、HSTORE 的索引访问中建立正确的 SQL 类型
    参考:#3503
  • [postgresql] [bug]
    Comparator.astext 修饰符不再隐式调用 ColumnElement.cast(),因为 PG 的 JSON/JSONB 类型允许彼此之间的交叉转换。在 JSON 索引访问上使用 ColumnElement.cast() 的代码,例如 col[someindex].cast(Integer),需要改为显式调用 Comparator.astext
    另请参阅
    现在需要显式调用 .astext 来执行 JSON 转换操作
    引用:#3503

mysql

  • [mysql] [功能]
    为 MySQL 驱动程序添加了“自动提交”支持,通过 AUTOCOMMIT 隔离级别设置。 感谢 Roman Podoliaka 的拉取请求。
    另请参阅
    增加了对“自动提交”“隔离级别”的支持
    引用:#3332
  • [mysql] [功能]
    为 MySQL 5.7 添加了 JSON。 JSON 类型提供了在 MySQL 中持久化 JSON 值以及“getitem”和“getpath”基本运算符的支持,利用 JSON_EXTRACT 函数来引用 JSON 结构中的单个路径。
    另请参阅
    MySQL JSON 支持
    引用:#3547
  • [mysql] [更改]
    MySQL  方言不再在使用 InnoDB 的表的 CREATE TABLE DDL 生成额外的“KEY”指令,该表具有具有 AUTO_INCREMENT  的复合主键,而不是在第一列上; 为了克服这里 InnoDB 的限制,PRIMARY KEY 约束现在生成的 AUTO_INCREMENT  列放在列列表中的第一位。
    另请参阅
    不再为具有 AUTO_INCREMENT 的列的复合主键生成隐式 KEY
    对于复合主键列,不再隐式启用 .autoincrement 指令
    引用:#3216

sqlite

  • [sqlite] [功能]
    SQLite 方言现在反映了外键约束中的 ON UPDATE 和 ON DELETE 词组。 感谢 Michal Petrucha 的拉取请求。
  • [sqlite] [功能]
    SQLite 方言现在反映了主键约束的名称。 感谢 Diana Clarke 的拉取请求。
    另请参阅
    主键约束名称的反射
    引用:#3629
  • [sqlite] [更改]
    为 SQLite 方言添加了对 Inspector.get_schema_names() 方法的支持,以与 SQLite 一起工作; 感谢 Brian Van Klaveren 的拉取请求。 修复了与模式有关的索引创建以及模式绑定表中外键约束的反射支持。
    另请参阅
    改进的远程模式支持
  • [sqlite] [错误]
    在 SQLite 上的右嵌套连接的解决方案,其中它们被重写为子查询以解决 SQLite 不支持此语法的问题,当检测到 SQLite 版本为 3.7.16 或更高版本时解除限制。
    另请参阅
    对 SQLite 版本 3.7.16 解除了右嵌套连接的限制
    参考:#3634
  • [sqlite] [错误]
    当检测到 SQLite 版本 3.10.0 或更高版本时,对于某些查询以 tablename.columnname 形式传递列名的 SQLite 的意外行为的解决方法现在已禁用。
    另请参阅
    针对 SQLite 版本 3.10.0 解除的点列名解决方法
    参考:#3633

mssql

  • [mssql] [功能]
    mssql_clustered 标志现在默认为 None,可设置为 False,这将为主键渲染 NONCLUSTERED 关键字,允许使用不同的索引作为“clustered”。感谢 Saulius Žemaitaitis 的拉取请求。
  • [mssql] [功能]
    通过 create_engine.isolation_levelConnection.execution_options.isolation_level 参数,为 SQL Server 方言添加了基本的隔离级别支持。
    另请参阅
    为 SQL Server 添加事务隔离级别支持
    参考:#3534
  • [mssql] [更改]
    legacy_schema_aliasing 标志,作为版本 1.0.5 中的一部分引入,允许禁用 MSSQL 方言为模式限定表创建别名的尝试,现在默认为 False;除非显式打开,否则旧行为现已禁用。
    另请参阅
    legacy_schema_aliasing 标志现在设置为 False
    参考:#3434
  • [mssql] [错误]
    调整 mxODBC 方言以在适当情况下使用 BinaryNull 符号与 VARBINARY 数据类型一起。感谢 Sheila Allen 的拉取请求。
  • [mssql] [错误]
    修复了 SQL Server 方言在将字符串或其他可变长度列类型反映为无界长度时分配字符串的长度属性为 "max" 的问题。虽然 SQL Server 方言支持显式使用 "max" 标记,但它不是基本字符串类型的正常约定的一部分,而是长度应该保持为 None。方言现在在反射类型时将长度分配为 None,以便在其他上下文中正常使用该类型。
    另请参阅
    String / varlength 类型在反射时不再显式表示“max”
    参考:#3504

杂项

  • [特性] [扩展]
    向 Mutation Tracking 扩展添加了MutableSetMutableList辅助类。感谢 Jeong YunWon 的拉取请求。
    参考:#3297
  • [错误] [扩展]
    现在在类级别尊重在混合属性或方法上指定的文档字符串,使其能够与 Sphinx autodoc 等工具一起使用。这里的机制必然涉及对混合属性进行一些包装,这可能会导致它们在内省时显示不同。
    另请参阅
    混合属性和方法现在也传播文档字符串以及.info
    参考:#3653
  • [错误] [sybase]
    不支持的 Sybase 方言现在在尝试编译包含“offset”的查询时引发NotImplementedError;Sybase 没有直接的“offset”功能。
    参考:#2278

1.1.18

发布日期:2018 年 3 月 6 日

postgresql

  • [postgresql] [错误] [py3k]
    修复了在 PostgreSQL COLLATE / ARRAY 调整中首次引入的错误,最初在#4006中,Python 3.7 正则表达式的新行为导致修复失败。
    参考:#4208

mysql

  • [mysql] [错误]
    MySQL 方言现在显式使用SELECT @@version查询服务器版本,以确保我们获得正确的版本信息。代理服务器如 MaxScale 干扰了传递给 DBAPI 的 connection.server_version 值,因此这不再可靠。
    参考:#4205

postgresql

  • [postgresql] [错误] [py3k]
    修复了在 PostgreSQL COLLATE / ARRAY 调整中首次引入的错误,最初在#4006中,Python 3.7 正则表达式的新行为导致修复失败。
    参考:#4208

mysql

  • [mysql] [错误]
    MySQL 方言现在显式使用SELECT @@version查询服务器版本,以确保我们获得正确的版本信息。代理服务器如 MaxScale 干扰了传递给 DBAPI 的 connection.server_version 值,因此这不再可靠。
    参考:#4205

1.1.17

发布日期:2018 年 2 月 22 日

  • [错误] [扩展]
    修复了在 1.2.3 和 1.1.16 中关于关联代理对象的回归,修订了在计算关联代理的“拥有类”时默认选择当前类的方法,如果代理对象与映射类没有直接关联,例如一个 mixin。
    参考:#4185

1.1.16

发布日期:2018 年 2 月 16 日

orm

  • [orm] [bug]
    修复了在父对象已被删除但相关对象尚未删除时 post_update 功能会发出 UPDATE 的问题。这个问题已经存在很长时间,但自 1.2 版本开始为 post_update 断言匹配的行数,这导致了错误。
    参考:#4187
  • [orm] [bug]
    修复了由于修复问题 #4116 而引起的回归,影响版本 1.2.2 和 1.1.15,导致在某些声明性 mixin/继承情况下以及如果关联代理从未映射的类中访问时,AssociationProxy 的“拥有类”被错误地计算为 NoneType 类。现在,“找到所有者”逻辑已被替换为一个深入的程序,该程序搜索分配给类或子类的完整映射器层次结构,以确定正确(我们希望)的匹配;如果找不到匹配项,则不会分配所有者。如果代理用于未映射的实例,则现在会引发异常。
    参考:#4185
  • [orm] [bug]
    修复了在嵌套或子事务回滚期间被清除的对象,同时其主键被改变,会导致该对象未能正确从会话中移除的错误,从而导致后续使用会话时出现问题。
    参考:#4151

sql

  • [sql] [bug]
    sqlalchemy.sqlalchemy.sql. 命名空间中添加了 nullsfirst()nullslast() 作为顶级导入。感谢 Lele Gaifax 提交的拉取请求。
  • [sql] [bug]
    修复了在 Insert.values() 中使用“multi-values”格式与 Column 对象作为键而不是字符串时会失败的 bug。感谢 Aubrey Stark-Toller 提交的拉取请求。
    参考:#4162

postgresql

  • [postgresql] [bug]
    将“SSL SYSCALL error: Operation timed out”添加到触发 psycopg2 驱动程序“断开”场景的消息列表中。感谢 André Cruz 的拉取请求。
  • [postgresql] [错误]
    将“TRUNCATE”添加到 PostgreSQL 方言接受的关键字列表中,作为“自动提交”触发关键字。感谢 Jacob Hayes 的拉取请求。

mysql

  • [mysql] [错误]
    修复了 MySQL 的“concat”和“match”运算符未能将 kwargs 传播到左右表达式的错误,导致编译器选项(如“literal_binds”)失败。
    参考:#4136

杂项

  • [错误] [池]
    修复了一个相当严重的连接池错误,即在由于用户定义的DisconnectionError或由于  1.2 版本发布的“pre_ping”功能导致刷新后获取的连接,如果连接由 weakref  清理(例如前端对象被垃圾回收)后返回到池中,该连接将不会被正确重置;弱引用仍将指向先前失效的 DBAPI  连接,而该连接将错误地调用重置操作。这将导致日志中的堆栈跟踪和连接被检入池中而未被重置,这可能导致锁定问题。
    参考:#4184

orm

  • [orm] [错误]
    修复了在父对象已被删除但依赖对象未被删除时,post_update 功能会发出 UPDATE 的问题。这个问题已经存在很长时间,但自 1.2 版本开始,现在对于 post_update 会断言匹配的行数,这会引发错误。
    参考:#4187
  • [orm] [错误]
    修复了由于问题#4116的修复引起的回归,影响了 1.2.2 版本以及 1.1.15 版本,导致在某些声明性 mixin/继承情况下,AssociationProxy的“拥有类”被错误地计算为NoneType类,以及如果关联代理从未映射的类中访问。现在,“找到所有者”的逻辑已被替换为一个深入的例程,该例程通过搜索分配给类或子类的完整映射器层次结构来确定正确(我们希望)的匹配;如果找不到匹配项,则不会分配所有者。如果代理针对未映射的实例使用,则现在会引发异常。
    参考:#4185
  • [orm] [错误]
    修复了在嵌套或子事务回滚期间被清除的对象,同时其主键被突变,将不会被正确地从会话中移除的错误,导致在使用会话时出现后续问题。
    参考:#4151

sql

  • [sql] [bug]
    nullsfirst()nullslast()作为sqlalchemy.sqlalchemy.sql.命名空间中的顶级导入添加。感谢 Lele Gaifax 的拉取请求。
  • [sql] [bug]
    修复了在Insert.values()中使用“multi-values”格式与Column对象作为键而不是字符串时会失败的 bug。感谢 Aubrey Stark-Toller 的拉取请求。
    参考:#4162

postgresql

  • [postgresql] [bug]
    将“SSL SYSCALL error: Operation timed out”添加到了 psycopg2 驱动程序的“断开连接”场景触发消息列表中。感谢 André Cruz 的拉取请求。
  • [postgresql] [bug]
    将“TRUNCATE”添加到了 PostgreSQL 方言接受的关键字列表中,作为“autocommit”触发关键字。感谢 Jacob Hayes 的拉取请求。

mysql

  • [mysql] [bug]
    修复了 MySQL 的“concat”和“match”运算符未能将 kwargs 传播到左右表达式的 bug,导致编译器选项如“literal_binds”失败。
    参考:#4136

杂项

  • [bug] [pool]
    修复了一个相当严重的连接池 bug,当一个连接在由用户定义的DisconnectionError或由  1.2  版本发布的“pre_ping”功能刷新后被获取时,如果连接被弱引用清理(例如前端对象被垃圾回收),则连接不会被正确重置;弱引用仍然会指向先前失效的  DBAPI 连接,导致重置操作错误地被调用。这将导致日志中的堆栈跟踪和连接被检入池中而未被重置,可能会导致锁定问题。
    参考:#4184

1.1.15

发布日期:2017 年 11 月 3 日

orm

  • [orm] [bug] [ext]
    修复了关联代理在首次调用时会不经意地将自身链接到一个AliasedClass对象的 bug,如果首次调用时将AliasedClass作为父级,会导致后续使用时出现错误。
    参考:#4116
  • [orm] [bug]
    修复了一个 bug,ORM 关系会警告存在冲突的同步目标(例如,两个关系都写入同一列)对于继承层次结构中的兄弟类,这两个关系实际上永远不会在写入时发生冲突。
    参考:#4078
  • [orm] [bug]
    修复了针对单表继承实体使用相关选择时,在外部查询中无法正确呈现的 bug,因为单一继承鉴别器标准的调整不当地重新应用于外部查询。
    参考:#4103

orm declarative

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

sql

  • [sql] [bug]
    修复了一个 bug,当参数为元组时,ColumnDefault__repr__会失败。感谢 Nicolas Caniart 的拉取请求。
    参考:#4126
  • [sql] [bug]
    修复了一个 bug,最近添加的ColumnOperators.any_()ColumnOperators.all_()方法在作为方法调用时无法正常工作,而不是使用独立函数any_()all_()。还为这些相对晦涩的 SQL 操作符添加了文档示例。
    参考:#4093

postgresql

  • [postgresql] [bug]
    进一步修复了与 COLLATE 一起使用ARRAY类的问题,因为在#4006中进行的修复未能适应多维数组。
    引用:#4006
  • [postgresql] [bug]
    修复了 array_agg 函数中的错误,其中传递已经是 ARRAY 类型的参数,例如 PostgreSQL 的 array 构造,会产生 ValueError,因为函数尝试嵌套数组。
    引用:#4107
  • [postgresql] [bug]
    修复了 PostgreSQL Insert.on_conflict_do_update() 中的错误,该错误会阻止插入语句作为 CTE(例如通过 Insert.cte())在另一个语句中使用。
    引用:#4074

mysql

  • [mysql] [bug]
    当检测到 MariaDB 10.2.8 或更早版本的 10.2 系列时发出警告,因为这些版本中的 CHECK 约束存在重大问题,这些问题已在 10.2.9 中解决。
    请注意,此更改日志消息未随 SQLAlchemy 1.2.0b3 发布,而是事后添加的。
    引用:#4097
  • [mysql] [bug]
    MySQL 5.7.20 现在会警告使用 @tx_isolation 变量;现在执行版本检查并使用 @transaction_isolation 以防止此警告。
    引用:#4120
  • [mysql] [bug]
    修复了在 MariaDB 10.2 系列中 CURRENT_TIMESTAMP 由于语法更改而无法正确反映的问题,其中该函数现在表示为 current_timestamp()
    引用:#4096
  • [mysql] [bug]
    MariaDB 10.2 现在支持 CHECK 约束(警告:由于上游问题,请使用版本 10.2.9 或更高版本)。反射现在在 SHOW CREATE TABLE 输出中考虑这些 CHECK 约束。
    引用:#4098

sqlite

  • [sqlite] [bug]
    修复了 SQLite CHECK 约束反射失败的错误,如果引用的表位于远程模式中,例如在 SQLite 中由 ATTACH 引用的远程数据库。
    引用:#4099

mssql

  • [mssql] [bug]
    为 SQL Server 的 PyODBC 方言添加了完整的“连接关闭”异常代码范围,包括 ‘08S01’、‘01002’、‘08003’、‘08007’、‘08S02’、‘08001’、‘HYT00’、‘HY010’。以前只覆盖了 ‘08S01’。
    引用:#4095

orm

  • [orm] [bug] [ext]
    修复了当关联代理在首次调用时不经意地将自身链接到一个AliasedClass对象时,如果首次调用时AliasedClass作为父级,会在后续使用时导致错误的 bug。
    参考:#4116
  • [orm] [bug]
    修复了 ORM 关系在继承层次结构中的兄弟类中可能会发出警告,提示存在冲突的同步目标(例如,两个关系都写入同一列),而实际上这两个关系在写入时永远不会发生冲突。
    参考:#4078
  • [orm] [bug]
    修复了针对单表继承实体使用相关子查询会导致外部查询无法正确渲染的 bug,因为不恰当地重新应用了单一继承鉴别器条件以重新应用条件到外部查询。
    参考:#4103

ORM 声明式

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

SQL

  • [sql] [bug]
    修复了当ColumnDefault__repr__参数为元组时会失败的 bug。感谢 Nicolas Caniart 的拉取请求。
    参考:#4126
  • [sql] [bug]
    修复了最近添加的 ColumnOperators.any_()ColumnOperators.all_() 方法在作为方法调用时无法正常工作的错误,而不是使用独立函数 any_()all_()。还为这些相对晦涩的 SQL 操作符添加了文档示例。
    参考:#4093

postgresql

  • [postgresql] [bug]
    进一步修复了与 COLLATE 结合使用的 ARRAY 类的问题,因为在 #4006 中进行的修复未能考虑到多维数组。
    参考:#4006
  • [postgresql] [bug]
    修复了array_agg函数中的错误,当传递一个已经是ARRAY类型的参数时,比如一个 PostgreSQL array 构造,会产生ValueError,因为函数尝试嵌套数组。
    参考:#4107
  • [postgresql] [bug]
    修复了 PostgreSQL Insert.on_conflict_do_update() 中的错误,该错误会阻止插入语句作为 CTE 使用,例如通过 Insert.cte() 在另一个语句中。
    参考:#4074

mysql

  • [mysql] [bug]
    当检测到 MariaDB 10.2.8 或更早版本的 10.2 系列时发出警告,因为这些版本中的 CHECK 约束存在重大问题,这些问题在 10.2.9 中已解决。
    请注意,此更改日志消息未随 SQLAlchemy 1.2.0b3 发布,而是事后添加的。
    参考:#4097
  • [mysql] [bug]
    MySQL 5.7.20 现在警告使用 @tx_isolation 变量;现在执行版本检查并使用 @transaction_isolation 代替以防止此警告。
    参考:#4120
  • [mysql] [bug]
    修复了在 MariaDB 10.2 系列中,CURRENT_TIMESTAMP 无法正确反映的问题,因为语法发生了变化,现在该函数表示为 current_timestamp()
    参考:#4096
  • [mysql] [bug]
    MariaDB 10.2 现在支持 CHECK 约束(警告:由于上游问题,请使用版本 10.2.9 或更高版本,详见#4097)。反射现在在存在这些 CHECK 约束时考虑这些 CHECK 约束,当它们出现在 SHOW CREATE TABLE 输出中时。
    参考:#4098

sqlite

  • [sqlite] [bug]
    修复了 SQLite CHECK 约束反射的 bug,如果引用的表位于远程模式中,例如 SQLite 中由 ATTACH 引用的远程数据库,则会失败。
    参考:#4099

mssql

  • [mssql] [bug]
    为 SQL Server 的 PyODBC 方言添加了一整套“连接关闭”异常代码,包括 ‘08S01’、‘01002’、‘08003’、‘08007’、‘08S02’、‘08001’、‘HYT00’、‘HY010’。之前只覆盖了 ‘08S01’。
    参考:#4095

1.1.14

发布日期:2017 年 9 月 5 日

orm

  • [orm] [bug]
    Session.merge()中修复了一个 bug,与#4030类似,其中对于身份映射中的目标对象的内部检查可能导致错误,如果在合并过程实际检索对象之前立即对其进行垃圾回收。
    参考:#4069
  • [orm] [bug]
    修复了当一个 undefer_group() 选项不会被识别,如果它延伸自使用连接式急加载加载的关系。此外,由于该 bug 导致执行了过多的工作,Python 函数调用数量在结果集列的初始计算中也提高了 20%,补充了 #3915 的连接式急加载改进。
    参考:#4048
  • [orm] [bug]
    在 ORM 身份映射中修复了竞争条件,该条件会导致对象在加载操作期间被不适当地移除,从而导致重复对象标识出现,特别是在涉及对象去重的连接急加载下。此问题特定于弱引用的垃圾收集,并且仅在 PyPy 解释器下观察到。
    参考:#4068
  • [orm] [bug]
    Session.merge()中修复了一个 bug,其中集合中的对象的主键属性设置为 None,对于通常是自动增量的键,将被视为数据库持久化键的一部分,导致在内部去重处理过程中实际上只插入一个对象到数据库中。
    参考:#4056
  • [orm] [bug]
    当针对不是MapperProperty的属性(例如关联代理)使用synonym()时,会引发InvalidRequestError。以前,尝试定位不存在的属性会导致递归溢出。
    参考:#4067

sql

  • [sql] [bug]
    修改了窗口函数的范围规范,允许范围中出现两个相同的 PRECEDING 或 FOLLOWING 关键字,通过允许范围的左侧为正数,右侧为负数,例如 (1, 3) 表示“1 FOLLOWING AND 3 FOLLOWING”。
    参考:#4053

orm

  • [orm] [bug]
    修复了Session.merge()中的一个 bug,与#4030类似,其中对于身份映射中的目标对象的内部检查,如果在合并过程实际检索对象之前立即被垃圾回收,可能会导致错误。
    参考:#4069
  • [orm] [bug]
    修复了一个 bug,其中一个undefer_group()选项如果从使用连接式急加载加载的关系扩展,则不会被识别。此外,由于该 bug 导致执行过多的工作,因此在结果集列的初始计算中,Python 函数调用次数也提高了 20%,这与#3915的连接式急加载改进相辅相成。
    参考:#4048
  • [orm] [bug]
    修复了 ORM 身份映射中的竞争条件,导致在加载操作期间不适当地移除对象,从而导致重复的对象标识出现,特别是在涉及对象去重的连接式急加载下。该问题特定于弱引用的垃圾回收,并且仅在 PyPy 解释器下观察到。
    参考:#4068
  • [orm] [bug]
    修复了Session.merge()中的一个 bug,其中集合中的对象的主键属性设置为None,而该属性通常是自动递增的,会被视为数据库持久化键的一部分,导致内部去重过程中实际上只有一个对象被插入到数据库中。
    参考:#4056
  • [orm] [bug]
    当对不是MapperProperty的属性使用synonym()时,会引发InvalidRequestError。以前,尝试定位不存在的属性会导致递归溢出。
    参考:#4067

sql

  • [sql] [bug]
    修改了窗口函数的范围规范,允许在范围内使用两个相同的 PRECEDING 或 FOLLOWING 关键字,通过允许范围的左侧为正数,右侧为负数,例如(1, 3)表示“1 FOLLOWING AND 3 FOLLOWING”。
    参考:#4053

1.1.13

发布日期:2017 年 8 月 3 日

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.0.19
    参考:#4035

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.0.19
    参考:#4035

1.1.12

发布日期:2017 年 7 月 24 日

orm

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

oracle

  • [oracle] [功能] [postgresql]
    Sequence添加了新关键字Sequence.cacheSequence.order,以允许渲染 Oracle 和 PostgreSQL 理解的 CACHE 参数,以及 Oracle 理解的 ORDER 参数。感谢 David Moore 的拉取请求。

测试

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

orm

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

oracle

  • [oracle] [feature] [postgresql]
    添加了新关键字Sequence.cacheSequence.orderSequence,以允许 Oracle 和 PostgreSQL 理解的 CACHE 参数的呈现,以及 Oracle 理解的 ORDER 参数。拉取请求由 David Moore 提供。

tests

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


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

相关实践学习
如何在云端创建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 中文文档(六十四)
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 JSON 关系型数据库
SqlAlchemy 2.0 中文文档(六十二)(5)
SqlAlchemy 2.0 中文文档(六十二)
14 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十二)(1)
SqlAlchemy 2.0 中文文档(六十二)
15 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十二)(3)
SqlAlchemy 2.0 中文文档(六十二)
18 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