SqlAlchemy 2.0 中文文档(六十一)(2)https://developer.aliyun.com/article/1560910
1.2.10
发布日期:2018 年 7 月 13 日
orm
- [orm] [bug]
在Bundle
构造中修复了一个错误,当放置两个同名列时,它们会被去重,当Bundle
作为渲染的 SQL 的一部分使用时,比如在语句的 ORDER BY 或 GROUP BY 中。
参考:#4295 - [orm] [bug]
由于 #4287 导致 1.2.9 中的回归错误,使用Load
选项与字符串通配符结合使用会导致 TypeError。
参考:#4298
sql
- [sql] [bug]
修复了一个 bug,在任何引用它的Table
之前,会明确删除Sequence
,这会在序列还涉及该表的服务器端默认值时出现问题,当使用MetaData.drop_all()
时。现在,在删除表本身之后,会调用处理要通过非服务器端列默认函数删除的序列的步骤。
参考:#4300
orm
- [orm] [bug]
修复了在Bundle
构造中的 bug,当将两个同名列放置在一起时,会被去重,当Bundle
作为渲染 SQL 的一部分使用时,例如在语句的 ORDER BY 或 GROUP BY 中。
参考:#4295 - [orm] [bug]
由于#4287,在 1.2.9 中出现了回归,使用Load
选项与��符串通配符一起使用会导致 TypeError。
参考:#4298
sql
- [sql] [bug]
修复了一个 bug,在任何引用它的Table
之前,会明确删除Sequence
,这会在序列还涉及该表的服务器端默认值时出现问题,当使用MetaData.drop_all()
时。现在,在删除表本身之后,会调用处理要通过非服务器端列默认函数删除的序列的步骤。
参考:#4300
1.2.9
发布日期:2018 年 6 月 29 日
orm
- [orm] [bug]
修复了在Query.join()
中链接多个连接元素可能无法正确适应先前左侧的问题,当链接共享相同基类的连接继承类时。
参考:#3505 - [orm] [bug]
修复了为烘焙查询生成缓存键时的 bug,这可能导致为跨子类的贪婪加载生成一个过短的缓存键。这反过来可能导致贪婪加载查询被缓存,而不是非贪婪加载查询,或者反之,对于多态“selectin”加载,或者可能对于延迟加载或 selectin 加载也是如此。
参考文献:#4287 - [orm] [bug]
修复了新多态选择加载中的错误,其中内部使用的 BakedQuery 会被给定的加载器选项所改变,这既会不适当地改变子类查询,也会将效果带到后续查询中。
参考文献:#4286 - [orm] [bug]
由于 #4256 引起的回归问题已修复(本身是对 #4228 的回归修复),它中断了一项未记录的行为,即将直接传递给Query
构造函数的非实体序列转换为单一元素序列。虽然这种行为从未得到支持或记录,但已经在使用中,因此已将其添加为Query
的行为约定。
参考文献:#4269 - [orm] [bug]
修复了在 1.2 版本中的性能回归和“烘焙”懒加载器中的错误结果,涉及从原始Query
对象的加载器选项生成缓存键。如果加载器选项是以“分支”样式构建的,使用相同的基本元素来构建多个选项,那么相同的选项将被重复渲染到缓存键中,导致性能问题以及生成错误的缓存键。已修复此问题,并通过在应用Query.options()
时防止重复应用相同选项对象来提高性能,以防止重复应用“分支”选项。
参考文献:#4270
sql
- [sql] [bug]
由于 #4147 引起的 1.2 版本中的回归问题已修复,其中一个Table
在反射期间重写其部分索引列或在使用Table.extend_existing
时重新定义其部分索引列时,Table.tometadata()
方法在尝试复制这些索引时将失败,因为它们仍然引用替换的列。现在的复制逻辑已适应了这种情况。
参考文献:#4279
mysql
- [mysql] [bug]
修复了 mysql-connector-python 方言中百分号重复的问题,不需要去除百分号的重复。此外,mysql-connector-python 驱动在传递游标描述中的列名时不一致,因此添加了一个解码器来有条件地将这些随机的字节值解码为 Unicode,仅在需要时进行解码。同时改进了 mysql-connector-python 的测试支持,但需要注意的是,该驱动程序仍然存在与 Unicode 相关的问题,目前尚未解决。 - [mysql] [bug]
修复了索引反射中的 bug,在 MySQL 8.0 上,包含 ASC 或 DESC 在索引列规范中的索引将不会被正确反映,因为 MySQL 8.0 引入了在表定义字符串中返回此信息的支持。
参考:#4293 - [mysql] [bug]
修复了 MySQLdb 方言和 PyMySQL 等变体中的 bug,在连接时对“unicode 返回”进行额外检查,明确使用“utf8”字符集,在 MySQL 8.0 中会发出警告,建议使用 utf8mb4。现在已经替换为 utf8mb4 等效。还更新了 MySQL 方言的文档,以在所有示例中指定 utf8mb4。对测试套件进行了额外的更改,以使用 utf8mb3 字符集和数据库(在某些边缘情况下 utf8mb4 存在排序问题),并支持 MySQL 8.0 中进行的配置默认更改,如 explicit_defaults_for_timestamp 以及为无效的 MyISAM 索引引发的新错误。
参考:#4283 - [mysql] [bug]
Update
构造现在支持Join
对象,这是 MySQL 对 UPDATE…FROM 支持的一部分。由于该构造已经接受了一个别名对象用于类似的目的,因此已经暗示了针对非表的 UPDATE 功能,因此已经添加了这个功能。
参考:#3645
sqlite
- [sqlite] [bug]
修复了测试套件中的问题,SQLite 3.24 添加了一个新的保留字,与 TypeReflectionTest 中的使用发生冲突。感谢 Nils Philippsen 提供的拉取请求。
mssql
- [mssql] [bug]
修复了 MSSQL 反射中的 bug,在不同模式中有两个同名表具有同名主键约束时,引用其中一个表的外键约束的列会被加倍,导致错误。感谢 Sean Dunn 提供的拉取请求。
参考:#4288 - [mssql] [bug] [py3k]
修复了在 Python 3 下 SQL Server 方言中的问题,当针对不包含“sys.dm_exec_sessions”或“sys.dm_pdw_nodes_exec_sessions”视图的非标准 SQL Server 数据库运行时,导致无法获取隔离级别,由于 UnboundLocalError 导致错误引发失败。
参考:#4273
oracle
- [oracle] [feature]
添加了一个新事件,目前仅由 cx_Oracle 方言使用,DialectEvents.setiputsizes()
。该事件传递了一个包含BindParameter
对象的字典,这些对象将被传递给 DBAPI 特定类型的对象,然后转换为参数名称,传递给 cx_Oraclecursor.setinputsizes()
方法。这既允许查看 setinputsizes 过程,也允许更改传递给此方法的数据类型的行为。
另请参阅
使用 setinputsizes 对 cx_Oracle 数据绑定性能进行细粒度控制
参考:#4290 - [oracle] [bug] [mysql]
修复了在 Oracle 和 MySQL 方言中使用 CTEs 进行 INSERT FROM SELECT 时的问题,其中 CTE 被放置在整个语句之上,这在其他数据库中是典型的,但是 Oracle 和 MariaDB 10.2 希望 CTE 出现在“INSERT”段的下方。请注意,当将 CTE 应用于 UPDATE 或 DELETE 语句内的子查询时,Oracle 和 MySQL 方言尚不起作用,因为 CTE 仍然应用于顶部而不是子查询内部。
参考:#4275
杂项
- [feature] [ext]
添加了新属性Query.lazy_loaded_from
,其中填充了使用此Query
来延迟加载关系的InstanceState
。这样做的理由是它作为水平分片功能的提示,以便使用状态的标识令牌作为查询中的默认标识令牌在 id_chooser() 中使用。
参考:#4243 - [bug] [py3k]
用从 Python 标准库复制的 vendored 版本替换了 inspect.formatargspec() 的使用,因为 inspect.formatargspec() 已被弃用,并且从 Python 3.7.0 开始发出警告。
参考:#4291
orm
- [orm] [bug]
修复了在Query.join()
中链接多个连接元素时可能无法正确适应先前左侧的问题,当链接共享相同基类的继承类时。
参考:#3505 - [orm] [bug]
修复了为烘焙查询生成缓存键时可能导致生成的缓存键过短的问题,对于跨子类的急加载。这可能会导致急加载查询被缓存代替非急加载查询,反之亦然,对于多态“selectin”加载,或者可能对于延迟加载或 selectin 加载也是如此。
参考:#4287 - [orm] [bug]
修复了新多态 selectin 加载中的错误,其中内部使用的 BakedQuery 会被给定的加载器选项改变,这既会不当地改变子类查询,也会将效果传递给后续查询。
参考:#4286 - [orm] [bug]
修复了由#4256引起的回归(本身是对#4228的回归修复),它破坏了一个未记录的行为,即将直接传递给Query
构造函数的非实体序列转换为单个元素序列。虽然这种行为从未得到支持或记录,但已经在使用中,因此已被添加为Query
的行为契约。
参考:#4269 - [orm] [bug]
修复了 1.2 版本中的性能回归问题以及关于“烘焙”延迟加载器的错误结果,涉及从原始Query
对象的加载器选项生成缓存键。如果加载器选项是以“分支”样式构建的,使用共同的基本元素为多个选项,那么相同的选项将被重复渲染到缓存键中,导致性能问题以及生成错误的缓存键。通过Query.options()
应用这种“分支”选项时,已修复此问题,并防止重复应用相同的选项对象以提高性能。
参考:#4270
sql
- [sql] [bug]
修复了 1.2 版本中的回归问题,由于 #4147 导致一个Table
的一些索引列被重新定义为新列,这种情况会在反射期间覆盖列或使用Table.extend_existing
时发生,因此当尝试复制这些索引时,Table.tometadata()
方法会失败,因为它们仍然指向被替换的列。现在的复制逻辑已经适应了这种情况。
参考:#4279
mysql
- [mysql] [bug]
修复了 mysql-connector-python 方言中百分号双倍的问题,该方言不需要去除百分号的双倍。此外,mysql-connector-python 驱动程序在传递列名时不一致,因此添加了一个解码器来有条件地将这些随机-有时是字节的值解码为 unicode,仅在需要时。还改进了对 mysql-connector-python 的测试支持,但应注意该驱动程序仍存在与 unicode 相关的问题,目前尚未解决。 - [mysql] [bug]
修复了在 MySQL 8.0 中索引反射中的一个 bug,其中在索引列规范中包含 ASC 或 DESC 的索引不会被正确反映,因为 MySQL 8.0 引入了在表定义字符串中返回此信息的支持。
参考:#4293 - [mysql] [bug]
修复了 MySQLdb 方言和 PyMySQL 等变体中的一个 bug,在连接时对“unicode 返回”进行额外检查时,显式使用“utf8”字符集,而在 MySQL 8.0 中会发出警告,建议使用 utf8mb4。现在已经用 utf8mb4 等效替换。还更新了 MySQL 方言的文档,以在所有示例中指定 utf8mb4。对测试套件进行了额外更改,以使用 utf8mb3 字符集和数据库(在某些边缘情况下 utf8mb4 存在排序问题),并支持 MySQL 8.0 中进行的配置默认更改,如 explicit_defaults_for_timestamp 以及对无效 MyISAM 索引引发的新错误。
参考:#4283 - [mysql] [bug]
Update
构造现在支持将Join
对象作为 MySQL 中 UPDATE…FROM 支持的对象。由于该构造已经接受了一个别名对象用于类似的目的,因此已经暗示了针对非表的 UPDATE 功能,因此这一功能已经被添加。
参考:#3645
sqlite
- [sqlite] [bug]
修复了测试套件中的问题,SQLite 3.24 添加了一个新的保留字与 TypeReflectionTest 中的用法冲突。感谢 Nils Philippsen 的拉取请求。
mssql
- [mssql] [bug]
修复了 MSSQL 反射中的错误,当不同模式中有两个同名表具有相同名字的主键约束时,引用其中一个表的外键约束的列会加倍,导致错误。感谢 Sean Dunn 的拉取请求。
参考:#4288 - [mssql] [bug] [py3k]
修复了在 Python 3 下的 SQL Server 方言中的问题,在运行针对不包含“sys.dm_exec_sessions”或“sys.dm_pdw_nodes_exec_sessions”视图的非标准 SQL Server 数据库时,导致无法获取隔离级别,由于 UnboundLocalError 导致错误提出失败。
参考:#4273
oracle
- [oracle] [feature]
添加了一个新的事件,目前仅由 cx_Oracle 方言使用,DialectEvents.setiputsizes()
。该事件传递了一个BindParameter
对象字典给将要传递给 cx_Oraclecursor.setinputsizes()
方法的 DBAPI 特定类型对象。这允许查看 setinputsizes 过程并能够改变传递给此方法的数据类型的行为。
另见
通过 setinputsizes 实现对 cx_Oracle 数据绑定性能的细粒度控制
参考:#4290 - [oracle] [bug] [mysql]
修复了在 Oracle 和 MySQL 方言中使用 CTE 进行 INSERT FROM SELECT 时的问题,其中 CTE 被放置在整个语句上方,与其他数据库一样,但是 Oracle 和 MariaDB 10.2 要求 CTE 放在“INSERT”段下方。请注意,当将 CTE 应用于 UPDATE 或 DELETE 语句内部的子查询时,Oracle 和 MySQL 方言尚不起作用,因为 CTE 仍然应用于顶部而不是内部子查询。
参考:#4275
杂项
- [feature] [ext]
添加了新属性Query.lazy_loaded_from
,其中填充了一个使用此Query
来延迟加载关系的InstanceState
。这样做的理由是它作为水平分片功能的提示,以便可以使用状态的标识令牌作为查询中要使用的默认标识令牌。
参考:#4243 - [bug] [py3k]
用从 Python 标准库复制的 vendored 版本替换了 inspect.formatargspec()的使用,因为 inspect.formatargspec()已被弃用,并且从 Python 3.7.0 开始发出警告。
参考:#4291
1.2.8
发布日期:2018 年 5 月 28 日
orm
- [orm] [bug]
修复了 1.2.7 中由#4228引起的回归,该回归本身修复了一个 1.2 级别的回归,其中传递给Session
的query_cls
可调用被假定为具有类方法可用性的Query
子类,而不是任意可调用对象。特别是,dogpile 缓存示例说明了query_cls
是一个函数而不是Query
子类。
参考:#4256 - [orm] [bug]
修复了 1.0 版本中长期存在的回归,该回归阻止了使用自定义MapperOption
来修改Query
对象的 _params 以进行延迟加载,因为延迟加载器本身会覆盖这些参数。这适用于维基上的“时间范围”示例。但请注意,现在需要使用Query.populate_existing()
方法来重写与已加载到标识映射中的对象相关联的映射器选项。
作为这一变更的一部分,现在自定义定义的MapperOption
将导致与目标对象相关的延迟加载器默认使用非烘焙查询,除非实现了MapperOption._generate_cache_key()
方法。特别是,修复了一个回归,该回归发生在使用 dogpile.cache“高级”示例时,该示例由于与烘焙查询加载器不兼容而未返回缓存结果,而是发出 SQL;通过这一变更,dogpile 示例中包含的多个版本的RelationshipCache
选项将完全禁用“烘焙”查询。请注意,dogpile 示例也经过现代化处理,以避免这两个问题,作为问题#4258的一部分。
参考:#4128 - [orm] [bug]
修复了新的Result.with_post_criteria()
方法与子查询急加载器交互不正确的 bug,即“后置条件”不会应用于嵌入式子查询急加载器。这与#4128有关,因为后置条件功能现在被延迟加载器使用。 - [orm] [bug]
更新了 dogpile.caching 示例,包括适应 “baked” 查询系统的新结构,该系统默认在延迟加载器和一些急切关系加载器中使用。由于 #4256,dogpile.caching 的 “relationship_caching” 和 “advanced” 示例也被破坏。这里的问题也通过 #4128 中的修复解决了。
引用:#4258
engine
- [engine] [bug]
修复了连接池问题,即如果在连接池的 “返回时重置” 序列期间引发了断开连接错误,并且针对外部Connection
对象打开了显式事务(例如从调用Session.close()
而不是回滚或提交,或者在调用Connection.close()
之前没有关闭使用Connection.begin()
声明的事务),将导致二次签入,这可能会导致同一连接的并发签出。现在通过断言来防止整体的二次签入条件,以及特定的二次签入场景已被修复。
引用:#4252 - [engine] [bug]
修复了一个引用泄漏问题,其中在语句执行中使用的参数字典的值将继续被 “编译缓存” 引用,因为存储了 Python 3 字典 keys() 使用的键视图。感谢 Olivier Grisel 提交的拉取请求。
sql
- [sql] [bug]
修复了在将文本值解释为 SQL 表达式值时遇到元组值并且无法正确格式化消息的“模糊文本”错误消息问题。感谢 Miguel Ventura 提交的拉取请求。
mssql
- [mssql] [bug]
修复了由 #4061 引起的 1.2 版本回归,其中 SQL Server 的 “BIT” 类型将被视为 “本机布尔” 的问题。这里的目标是避免在列上创建 CHECK 约束,然而更大的问题是 BIT 值不像一个真/假常量那样工作,不能被解释为一个独立的表达式,例如 “WHERE ”。SQL Server 方言现在回到了非本机布尔,但增加了一个额外的标志,仍然避免创建 CHECK 约束。
引用:#4250
oracle
- [oracle] [bug]
Oracle 的 BINARY_FLOAT 和 BINARY_DOUBLE 数据类型现在参与 cx_Oracle.setinputsizes(),传递 NATIVE_FLOAT,以支持 NaN 值。此外,BINARY_FLOAT
、BINARY_DOUBLE
和DOUBLE_PRECISION
现在都是Float
的子类,因为这些是浮点数据类型,而不是十进制。这些数据类型已经将Float.asdecimal
标志默认设置为 False,与Float
的行为一致。
参考:#4264 - [oracle] [bug]
为BINARY_FLOAT
、BINARY_DOUBLE
数据类型添加了反��功能。 - [oracle] [bug]
修改了 Oracle 方言,当使用Integer
类型时,设置 cx_Oracle.NUMERIC 类型用于 setinputsizes()。在 SQLAlchemy 1.1 及更早版本中,cx_Oracle.NUMERIC 无条件地传递给所有数值类型,而在 1.2 中,为了获得更好的数值精度,这一点被移除。然而,对于整数,一些数据库/客户端设置将无法将布尔值 True/False 强制转换为整数,这在使用 SQLAlchemy 1.2 时引入了退化行为。总体而言,setinputsizes 逻辑似乎需要更多的灵活性,因此这是一个开始。
参考:#4259
测试
- [tests] [bug]
修复了测试套件中的一个 bug,如果外部方言对server_version_info
返回None
,排除逻辑会引发AttributeError
。
参考:#4249
杂项
- [bug] [ext]
水平分片扩展现在利用了作为 #4137 的一部分添加到 ORM 身份键中的标识令牌,当对象刷新或基于列的延迟加载或取消过期操作发生时。由于我们知道对象的“分片”来自哪里,因此在刷新时利用这个值,从而避免针对与此对象身份不匹配的其他分片进行查询。
参考:#4247 - [bug] [ext]
修复了一种竞争条件,该条件可能会在多线程环境中使用 automapAutomapBase.prepare()
与可能调用configure_mappers()
的其他线程相互作用时发生,因为使用其他映射器会导致未完成的 automap 映射工作被configure_mappers()
步骤拉入,从而导致错误。
参考:#4266
orm
- [orm] [bug]
修复了 1.2.7 版本中由#4228引起的回归问题,该问题本身修复了一个 1.2 级别的回归问题,即假定传递给Session
的query_cls
可调用对象是Query
的子类,并具有类方法可用性,而不是任意可调用对象。特别是,dogpile 缓存示例说明了query_cls
是一个函数而不是Query
的子类。
参考:#4256 - [orm] [bug]
修复了 1.0 版本中长期存在的回归问题,该问题阻止了自定义MapperOption
用于更改Query
对象的 _params 以进行延迟加载,因为延迟加载器本身会覆盖这些参数。这适用于维基上的“时间范围”示例。但请注意,现在需要使用Query.populate_existing()
方法来重写与已加载到标识映射中的对象相关联的映射器选项。
作为这一变更的一部分,现在自定义定义的MapperOption
将导致与目标对象相关的延迟加载器默认使用非烘焙查询,除非实现了MapperOption._generate_cache_key()
方法。特别是,这修复了一个回归问题,即在使用 dogpile.cache 的“高级”示例时发生的问题,该问题未返回缓存结果,而是由于与烘焙查询加载器不兼容而发出 SQL;通过更改,dogpile 示例中包含的RelationshipCache
选项将完全禁用“烘焙”查询。请注意,作为问题#4258的一部分,dogpile 示例也现代化以避免这两个问题。
参考:#4128 - [orm] [bug]
修复了新的Result.with_post_criteria()
方法与子查询急加载器的交互不正确的错误,即“后置条件”不会应用于嵌入式子查询急加载器。这与#4128有关,因为现在懒加载器使用了后置条件功能。 - [orm] [bug]
更新了 dogpile.caching 示例,包括适用于“baked”查询系统的新结构,默认情况下在懒加载器和一些急加载关系加载器中使用。dogpile.caching 的“relationship_caching”和“advanced”示例也由于#4256而中断。这里的问题也通过#4128中的修复来解决。
参考:#4258
engine
- [engine] [bug]
修复了连接池问题,即如果在连接池的“重置返回时”序列中引发了断开连接错误,并且同时针对封闭的Connection
对象打开了显式事务(例如从调用Session.close()
而没有回滚或提交,或者在调用Connection.close()
之前没有关闭使用Connection.begin()
声明的事务),将导致双重签入,然后可能导致对同一连接的并发签出。通过断言来防止整体双重签入条件,以及特定的双重签入场景已得到修复。
参考:#4252 - [engine] [bug]
修复了引用泄漏问题,即在语句执行中使用的参数字典的值将继续被“编译缓存”引用,因为存储了 Python 3 字典 keys()使用的键视图。感谢 Olivier Grisel 的拉取请求。
sql
- [sql] [bug]
修复了在将文字值解释为 SQL 表达式值时遇到元组值时使用的“模棱两可的文字”错误消息,并未正确格式化消息的问题。感谢 Miguel Ventura 的拉取请求。
mssql
- [mssql] [bug]
修复了由#4061引起的 1.2 版本回归问题,其中 SQL Server 的“BIT”类型被认为是“本地布尔”。这里的目标是避免在列上创建 CHECK 约束,但更大的问题是 BIT 值不像真/假常量那样行为,并且不能被解释为独立表达式,例如“WHERE ”。SQL Server 方言现在回到了非本地布尔,但增加了一个额外的标志,仍然避免创建 CHECK 约束。
参考:#4250
Oracle
- [oracle] [bug]
Oracle 的 BINARY_FLOAT 和 BINARY_DOUBLE 数据类型现在参与 cx_Oracle.setinputsizes(),传递 NATIVE_FLOAT,以支持 NaN 值。此外,BINARY_FLOAT
、BINARY_DOUBLE
和DOUBLE_PRECISION
现在都是Float
的子类,因为这些是浮点数据类型,而不是十进制。这些数据类型已经将Float.asdecimal
标志默认设置为 False,与Float
的行为一致。
参考:#4264 - [oracle] [bug]
为BINARY_FLOAT
、BINARY_DOUBLE
数据类型添加了反射功能。 - [oracle] [bug]
修改了 Oracle 方言,当使用Integer
类型时,设置了 cx_Oracle.NUMERIC 类型用于 setinputsizes()。在 SQLAlchemy 1.1 及更早版本中,cx_Oracle.NUMERIC 无条件地传递给所有数值类型,而在 1.2 中,这被移除以允许更好的数值精度。然而,对于整数,一些数据库/客户端设置将无法将布尔值 True/False 强制转换为整数,这在使用 SQLAlchemy 1.2 时引入了回归行为。总体而言,setinputsizes 逻辑似乎需要更多的灵活性,因此这是一个开始。
参考:#4259
测试
- [测试] [bug]
修复了测试套件中的一个错误,如果外部方言对server_version_info
返回None
,则排除逻辑将引发AttributeError
。
参考:#4249
杂项
- [bug] [ext]
水平分片扩展现在利用了作为#4137的一部分添加到 ORM 标识键中的标识令牌,当对象刷新或基于列的延迟加载或取消过期操作发生时。由于我们知道对象来自的“分片”,因此在刷新时我们利用此值,从而避免针对与此对象标识不匹配的其他分片进行查询。
参考:#4247 - [bug] [ext]
修复了可能发生的竞争条件,如果在多线程上下文中使用 automapAutomapBase.prepare()
与其他可能调用configure_mappers()
的线程一起使用其他映射器。 automap 的未完成映射工作对于被configure_mappers()
步骤拉入尤为敏感,导致错误。
参考:#4266
1.2.7
发布日期:2018 年 4 月 20 日
orm
- [orm] [bug]
修复了 1.2 版本中分片查询功能中的回归,其中新的“identity_token”元素在懒加载操作范围内未被正确考虑,当在身份映射中搜索相关的多对一元素时。新行为将允许利用“id_chooser”来确定从身份映射中检索的最佳标识键。为了实现这一点,对 1.2 的“identity_token”方法进行了一些重构,对ShardedQuery
的实现进行了一些细微更改,其他派生类应该注意这些更改。
参考:#4228 - [orm] [bug]
修复了单继承加载中的问题,其中使用别名实体与单继承子类结合使用Query.select_from()
方法会导致 SQL 呈现为未别名化的表混入查询中,导致笛卡尔积。特别是当针对单继承子类使用新的“selectin”加载器时,会受到影响。
参考:#4241
sql
- [sql] [bug]
修复了使用“literal_binds”选项编译 INSERT 语句时的问题,该语句还使用了显式序列和“inline”生成,如在 PostgreSQL 和 Oracle 上,会导致序列处理程序无法容纳额外的关键字参数。
参考:#4231
postgresql
- [postgresql] [feature]
添加了新的 PG 类型REGCLASS
,有助于将表名转换为 OID 值。感谢 Sebastian Bank 的拉取请求。
参考:#4160 - [postgresql] [bug]
修复了 PostgreSQL “range” 数据类型(如 DATERANGE)的特殊“不等于”运算符与 PythonNone
值比较时无法渲染“IS NOT NULL”的 bug。
参考:#4229
mssql
oracle
- [oracle] [bug]
如果精度为 NULL 且比例为零,则 Oracle NUMBER 数据类型将反映为 INTEGER,因为这是从 Oracle 表反映出来的 INTEGER 值。感谢 Kent Bower 的拉取请求。
orm
- [orm] [bug]
修复了 1.2 版本中分片查询功能中的回归 bug,其中新的“identity_token”元素在搜索相关的一对多元素时未被正确考虑在延迟加载操作范围内。新的行为将允许利用“id_chooser”来确定从身份映射中检索的最佳身份键。为了实现这一点,对 1.2 版本的“identity_token”方法进行了一些重构,对于此类的其他派生应该注意到一些对ShardedQuery
实现的轻微更改。
参考:#4228 - [orm] [bug]
修复了单继承加载中的问题,其中在使用Query.select_from()
方法时,针对单继承子类使用别名实体会导致 SQL 渲染时未经别名处理的表混入查询,导致笛卡尔积。特别是当针对单继承子类使用新的“selectin”加载器时会受到影响。
参考:#4241
sql
- [sql] [bug]
修复了使用“literal_binds”选项编译 INSERT 语句时,同时使用显式序列和“inline”生成(如在 PostgreSQL 和 Oracle 上),无法在序列处理过程中适应额外关键字参数的问题。
参考:#4231
postgresql
- [postgresql] [feature]
添加了新的 PG 类型REGCLASS
,有助于将表名转换为 OID 值。感谢 Sebastian Bank 的拉取请求。
参考:#4160 - [PostgreSQL] [错误]
修复了针对 PostgreSQL“range”数据类型(如 DATERANGE)的特殊“不等于”运算符与 PythonNone
值比较时无法呈现“IS NOT NULL”的错误。
参考:#4229
MSSQL
Oracle
- [Oracle] [错误]
如果精度为 NULL 且比例为零,则 Oracle NUMBER 数据类型将反映为 INTEGER,因为这是从 Oracle 表反映出来的 INTEGER 值的方式。拉取请求由 Kent Bower 提供。
1.2.6
发布日期:2018 年 3 月 30 日
ORM
- [ORM] [错误]
修复了在与具有替代命名属性设置的非主映射器一起使用Mutable.associate_with()
或Mutable.as_mutable()
时会产生属性错误的错误。由于非主映射器不用于持久性,因此可变扩展现在将非主映射器排除在其仪器步骤之外。
参考:#4215
引擎
- [引擎] [错误]
修复了连接池中可能存在连接但未调用所有“connect”事件处理程序的错误,如果先前的“connect”处理程序抛出异常;请注意,方言本身具有发出 SQL 的连接处理程序,例如设置事务隔离级别的处理程序,如果数据库处于不可用状态,则可能失败,但仍允许连接。如果任何连接处理程序失败,首先使连接无效。
参考:#4225
SQL
PostgreSQL
- [PostgreSQL] [功能]
添加了对在 PostgreSQL 表定义中使用“PARTITION BY”的支持,使用“postgresql_partition_by”。拉取请求由 Vsevolod Solovyov 提供。
MSSQL
- [MSSQL] [错误]
调整了对 pyodbc 的 SQL Server 版本检测,只允许数字标记,过滤掉非整数,因为该方言使用此值进行元组-数字比较。无论如何,这通常对所有已知的 SQL Server/pyodbc 驱动程序都是正确的。
参考:#4227
oracle
- [oracle] [bug]
支持的最低 cx_Oracle 版本为 5.2(2015 年 6 月)。以前,该方言对版本 5.0 进行了断言,但从 1.2.2 开始,我们使用了一些直到 5.2 才出现的符号。
参考:#4211
misc
- [bug] [declarative]
移除了在调用__table_args__
、__mapper_args__
时发出的警告,这些方法被命名为@declared_attr
方法,当从非映射的声明性 mixin 中调用时。直接调用这些方法是文档中指定的在映射类上覆盖这些方法时要使用的方法。对于常规属性名称,警告仍会发出。
参考:#4221
orm
- [orm] [bug]
修复了在与具有替代命名属性设置的非主要映射器一起使用Mutable.associate_with()
或Mutable.as_mutable()
时会产生属性错误的错误。由于非主要映射器不用于持久性,因此可变扩展现在将非主要映射器排除在其检测步骤之外。
参考:#4215
engine
- [engine] [bug]
修复了连接池中的错误,其中如果先前的“connect”处理程序抛出异常,则可能存在连接而未调用所有“connect”事件处理程序;请注意,方言本身具有发出 SQL 的连接处理程序,例如设置事务隔离的处理程序,如果数据库处于不可用状态,则可能失败,但仍允许连接。如果任何连接处理程序失败,现在首先使连接无效。
参考:#4225
sql
postgresql
- [postgresql] [feature]
在 PostgreSQL 表定义中添加了对“PARTITION BY”的支持,使用“postgresql_partition_by”。感谢 Vsevolod Solovyov 的拉取请求。
mssql
- [mssql] [bug]
调整了对于 pyodbc 的 SQL Server 版本检测,只允许数字标记,过滤掉非整数,因为该方言对于此值进行元组数值比较。在任何情况下,这通常对所有已知的 SQL Server/pyodbc 驱动程序都是正确的。
参考:#4227
oracle
- [oracle] [bug]
支持的最低 cx_Oracle 版本是 5.2(2015 年 6 月)。之前,该方言对版本 5.0 进行了断言,但从 1.2.2 版本开始,我们使用了一些直到 5.2 版本才出现的符号。
参考:#4211
misc
- [bug] [declarative]
移除了一个警告,当调用@declared_attr
方法命名为__table_args__
,__mapper_args__
时,当从非映射的声明性混合物中调用时会发出警告。直接调用这些方法是文档中建议的方法,当一个映射类覆盖其中一个这些方法时使用。对于常规属性名称仍然会发出警告。
参考:#4221
1.2.5
发布日期:2018 年 3 月 6 日
orm
- [orm] [feature]
添加了新功能Query.only_return_tuples()
。导致Query
对象无条件地返回键控元组对象,即使查询针对的是单个实体。拉取请求由 Eric Atkin 提供。 - [orm] [bug]
在新的“多态 selectin”加载中修复了一个错误,当从关系延迟加载器部分加载多态对象的选择时,导致加载中出现“空 IN”条件,在“IN”的“内联”形式中引发错误。
参考:#4199 - [orm] [bug]
修复了 1.2 版本的回归问题,当一个包含AliasedClass
对象的映射器选项,通常在使用QueryableAttribute.of_type()
方法时,无法被 pickle。1.1 版本的行为是从路径中省略别名类对象,因此恢复了这种行为。
参考:#4209
sql
- [sql] [bug]
修复了:class:.CTE
构造中的错误,与#4204类似,其中一个被别名化的CTE
在“克隆”操作期间无法正确复制自身,这在 ORM 中经常发生,并且在使用ClauseElement.params()
方法时也会发生。
参考:#4210 - [sql] [bug]
修复了 CTE 渲染中的一个 bug,即将CTE
转换为Alias
时,如果在 FROM 子句中多次引用 CTE,则其“ctename AS aliasname”子句不会适当地渲染。
参考:#4204 - [sql] [bug]
修复了新的“扩展 IN 参数”功能中的一个 bug,即值的绑定参数处理器根本不起作用,测试未能覆盖这个相当基本的情况,其中包括 ENUM 值无法工作。
参考:#4198
postgresql
- [postgresql] [bug] [py3k]
修复了 PostgreSQL COLLATE / ARRAY 调整中的一个 bug,首次引入于#4006,其中 Python 3.7 正则表达式中的新行为导致修复失败。
此更改也已回溯至:1.1.18
参考:#4208
mysql
- [mysql] [bug]
MySQL 方言现在明确使用SELECT @@version
向服务器查询版本,以确保我们正确获取版本信息。代理服务器如 MaxScale 干扰了传递给 DBAPI 的连接服务器版本值,因此这不再可靠。
此更改也已回溯至:1.1.18
参考:#4205
orm
- [orm] [feature]
添加了新功能Query.only_return_tuples()
。导致Query
对象无条件返回键值元组对象,即使查询针对单个实体。感谢 Eric Atkin 提交的拉取请求。 - [orm] [bug]
修复了新的“多态选择”加载中的一个 bug,当从关系懒加载器部分加载多态对象的选择时,导致加载中出现“空 IN”条件,在“IN”的“内联”形式中引发错误。
参考:#4199 - [orm] [bug]
修复了 1.2 版本中的一个问题,即包含AliasedClass
对象的映射器选项无法被 pickle 化。1.1 版本的行为是从路径中省略别名类对象,因此恢复了这种行为。
参考:#4209
sql
- [sql] [bug]
修复了:class:.CTE
构造中的错误,与#4204类似,其中一个被别名的CTE
在“克隆”操作期间无法正确复制自身,这在 ORM 中经常发生,也在使用ClauseElement.params()
方法时发生。
参考:#4210 - [sql] [bug]
修复了在 CTE 渲染中的一个错误,其中一个CTE
也被转换为一个Alias
,如果在 FROM 子句中对 CTE 有多个引用,则其“ctename AS aliasname”子句不会被正确渲染。
参考:#4204 - [sql] [bug]
修复了新的“扩展 IN 参数”功能中的错误,其中值的绑定参数处理器根本不起作用,测试未能覆盖这个非常基本的情况,其中包括 ENUM 值无法工作。
参考:#4198
postgresql
- [postgresql] [bug] [py3k]
修复了在 PostgreSQL COLLATE / ARRAY 调整中首次引入的错误,其中 Python 3.7 正则表达式中的新行为导致修复失败。
此更改也被回溯到:1.1.18
参考:#4208
mysql
- [mysql] [bug]
MySQL 方言现在明确使用SELECT @@version
向服务器查询服务器版本,以确保我们获得正确的版本信息。代理服务器如 MaxScale 干扰传递给 DBAPI 的 connection.server_version 值,因此这不再可靠。
此更改也被回溯到:1.1.18
参考:#4205
1.2.4
发布日期:2018 年 2 月 22 日
orm
- [orm] [bug]
修复了 ORM 版本控制功能中的 1.2 回归错误,其中针对一个select()
或alias()
的映射,还使用了针对底层表的版本控制列,由于添加的检查导致失败,这是作为#3673的一部分。
参考:#4193
engine
- [engine] [bug]
由于来自#4181的修复导致的 1.2.3 中的回归错误,涉及Engine
和OptionEngine
的事件系统的更改没有考虑到事件的移除,当在类级别调用时会引发AttributeError
。
参考:#4190
sql
- [sql] [bug]
修复了 CTE 表达式的 bug,当给定名称区分大小写或需要引号时,它们的名称或别名名称不会被引用。感谢 Eric Atkin 的拉取请求。
参考:#4197
orm
- [orm] [bug]
修复了 1.2 版本中 ORM 版本控制功能的回归错误,其中针对select()
或alias()
的映射,同时还使用了对基础表的版本控制列,由于#3673中添加的检查而失败。
参考:#4193
engine
- [engine] [bug]
由于来自#4181的修复导致的 1.2.3 中的回归错误,涉及Engine
和OptionEngine
的事件系统的更改没有考虑到事件的移除,当在类级别调用时会引发AttributeError
。
参考:#4190
sql
- [sql] [bug]
修复了 CTE 表达式的 bug,当给定名称区分大小写或需要引号时,它们的名称或别名名称不会被引用。感谢 Eric Atkin 的拉取请求。
参考:#4197
1.2.3
发布日期:2018 年 2 月 16 日
orm
- [orm] [feature]
向set_attribute()
函数添加了新参数set_attribute.inititator
,允许从监听器函数接收的事件令牌传播到后续的设置事件。 - [orm] [bug]
修复了后更新功能中的问题,当父对象已被删除但相关对象尚未删除时会发出 UPDATE。这个问题已经存在很长时间,但自 1.2 版本开始,现在对后更新断言匹配的行数,这会引发错误。
这个更改也被回溯到:1.1.16
参考:#4187 - [orm] [bug]
修复了由于问题#4116修复引起的回归,影响版本 1.2.2 以及 1.1.15,导致在某些声明性混合/继承情况下错误计算AssociationProxy
的“拥有类”为NoneType
类,以及如果关联代理从未映射的类中访问。“找到所有者”的逻辑已被替换为一个深入的例程,通过搜索分配给类或子类的完整映射器层次结构来确定正确(我们希望)的匹配;如果找不到匹配项,则不会分配所有者。如果对未映射的实例使用代理,则现在会引发异常。
此更改也回溯到:1.1.16
参考:#4185 - [ORM] [错误]
修复了Bundle
对象未正确报告由 bundle 表示的主要Mapper
对象的 bug,如果有的话。这个问题的一个直接副作用是,新的 selectinload 加载器策略无法与水平分片扩展一起工作。
参考:#4175 - [ORM] [错误]
修复了具体继承映射中的 bug,其中用户定义的属性(如镜像来自兄弟类的映射属性的混合属性)会被映射器在实例级别被覆盖为不可访问。此外,确保在映射器配置阶段不会在类级别隐式调用用户绑定的描述符。
参考:#4188 - [ORM] [错误]
修复了reconstructor()
事件助手应用于映射类的__init__()
方法时不会被识别的 bug。
参考:#4178
引擎
- [引擎] [错误]
修复了一个 bug,当使用Engine.execution_options()
方法时,与类级别的Engine
关联的事件会在类级别时被重复。为了实现这一点,半私有类OptionEngine
不再直接接受类级别的事件,并将引发错误;该类仅从其父类Engine
传播类级别的事件。实例级别的事件继续像以前一样工作。
参考:#4181 - [引擎] [错误]
URL
对象现在允许多次指定查询键,它们的值将被连接成一个列表。这是为了支持插件功能的特性,该功能在CreateEnginePlugin
中有文档记录,文档中指出“plugin”可以多次传递。此外,插件名称可以通过新的create_engine.plugins
参数在 URL 之外传递给create_engine()
。
参考:#4170
sql
- [sql] [feature]
为Enum
添加了对持久化枚举值的支持,而不是键,当使用 Python pep-435 风格的枚举对象时。用户提供一个可调用函数,该函数将返回要持久化的字符串值。这允许对非字符串值的枚举进行值持久化。感谢 Jon Snyder 提供的拉取请求。
参考:#3906 - [sql] [bug]
修复了Enum
类型在多个键引用相同值时无法正确处理枚举“别名”的错误,感谢 Daniel Knell 提供的拉取请求。
参考:#4180
postgresql
- [postgresql] [bug]
将“SSL SYSCALL error: Operation timed out”添加到了触发 psycopg2 驱动程序“断开连接”场景的消息列表中。感谢 André Cruz 提供的拉取请求。
此更改也回溯到:1.1.16 - [postgresql] [bug]
将“TRUNCATE”添加到了 PostgreSQL 方言接受的关键字列表中,作为一个“autocommit”触发关键字。感谢 Jacob Hayes 提供的拉取请求。
此更改也回��到:1.1.16
sqlite
- [sqlite] [bug]
修复了当平台上既没有安装 pysqlite2 也没有安装 sqlite3 时引发的导入错误,使得引发 sqlite3 相关的导入错误,而不是实际的失败模式 pysqlite2。感谢 Robin 提供的拉取请求。
oracle
- [oracle] [feature]
外键的 ON DELETE 选项现在是 Oracle 反射的一部分。Oracle 不支持 ON UPDATE 级联。感谢 Miroslav Shubernetskiy 提供的拉取请求。 - [oracle] [bug]
修复了 cx_Oracle 断开连接检测中的错误,用于 pre_ping 和其他功能,其中可能会引发一个包含数字错误代码的 DatabaseError; 以前我们在这种情况下没有检查断开连接代码。
参考:#4182
tests
- [tests] [bug]
在 1.2 版本中添加的一个测试,旨在确认 Python 2.7 的行为,结果只确认了 Python 2.7.8 的行为。Python bug#8743 仍然影响 Python 2.7.7 及更早版本中的集合比较,因此涉及 AssociationSet 的相关测试不再适用于这些较旧的 Python 2.7 版本。
参考:#3265
杂项
- [bug] [pool]
修复了一个相当严重的连接池错误,即在由于用户定义的DisconnectionError
或由于 1.2 版本发布的“pre_ping”功能导致刷新后获取的连接,如果连接通过弱引用清理(例如前端对象被垃圾回收)返回到池中,则不会正确重置;弱引用仍将指向先前失效的 DBAPI 连接,而将重置操作错误地调用。这将导致日志中的堆栈跟踪以及将连接检入池中而不进行重置,这可能会导致锁定问题。
此更改也已回溯至:1.1.16
参考:#4184
orm
- [orm] [feature]
在set_attribute()
函数中添加了新参数set_attribute.inititator
,允许从监听器函数接收到的事件令牌传播到后续的设置事件。 - [orm] [bug]
修复了后更新功能中的问题,当父对象已被删除但相关对象尚未删除时,会发出 UPDATE。这个问题已经存在很长时间,但由于 1.2 现在断言后更新匹配的行数,因此会引发错误。
此更改也已回溯至:1.1.16
参考:#4187 - [orm] [bug]
由于修复问题#4116导致的回归,影响版本 1.2.2 以及 1.1.15,导致在某些声明性混合/继承情况下以及如果关联代理从未映射的类中访问时,错误地计算AssociationProxy
的“拥有类”为NoneType
类。现在,“找到所有者”的逻辑已被一个深入的例程所取代,该例程通过搜索分配给类或子类的完整映射器层次结构来确定正确(我们希望)的匹配;如果找不到匹配项,则不会分配所有者。如果代理用于未映射的实例,则现在会引发异常。
此更改也已回溯至:1.1.16
参考:#4185 - [orm] [bug]
修复了Bundle
对象未正确报告由 bundle 表示的主要Mapper
对象(如果有)的 bug。此问题的直接副作用是新的 selectinload 加载器策略无法与水平分片扩展一起使用。
参考:#4175 - [orm] [bug]
修复了具体继承映射中的 bug,其中用户定义的属性(例如反映与同级类的映射属性相同名称的混合属性)将被映射器覆盖为在实例级别不可访问。此外,确保在映射器配置阶段不会隐式调用用户绑定的描述符。
参考:#4188 - [orm] [bug]
修复了当reconstructor()
事件助手应用于映射类的__init__()
方法时,它不会被识别的 bug。
参考:#4178
engine
- [engine] [bug]
修复了当使用Engine.execution_options()
方法时与Engine
关联的事件在类级别上会重复的 bug。为了实现这一点,半私有类OptionEngine
不再直接接受类级别的事件,并将引发错误;该类仅从其父类Engine
传播类级别的事件。实例级别的事件继续像以前一样工作。
参考:#4181 - [engine] [bug]
URL
对象现在允许指定查询键多次,其值将被连接成一个列表。这是为了支持插件功能的特性所做的修改,该特性在CreateEnginePlugin
中有详细说明,该文档指出“plugin”可以多次传递。此外,插件名称可以在使用新的create_engine.plugins
参数之外通过 URL 传递给create_engine()
。
参考:#4170
sql
- [sql] [feature]
为Enum
添加了支持,以持久化枚举的值,而不是键,当使用 Python pep-435 风格的枚举对象时。用户提供一个可调用函数,该函数将返回要持久化的字符串值。这允许对非字符串值的枚举也可以进行值持久化。感谢 Jon Snyder 的拉取请求。
参考:#3906 - [sql] [bug]
修复了Enum
类型无法正确处理枚举“别名”的 bug,当多个键引用相同值时。感谢 Daniel Knell 的拉取请求。
参考:#4180
postgresql
- [postgresql] [bug]
将“SSL SYSCALL error: Operation timed out”添加到触发 psycopg2 驱动程序“断开连接”场景的消息列表中。感谢 André Cruz 的拉取请求。
此更改也回溯到:1.1.16 - [postgresql] [bug]
将“TRUNCATE”添加到 PostgreSQL 方言接受的关键字列表中,作为“自动提交”触发关键字。感谢 Jacob Hayes 的拉取请求。
此更改也回溯到:1.1.16
sqlite
- [sqlite] [bug]
修复了当平台既没有安装 pysqlite2 也没有安装 sqlite3 时引发的导入错误,使得引发与 sqlite3 相关的导入错误,而不是实际的失败模式 pysqlite2。感谢 Robin 的拉取请求。
oracle
- [oracle] [feature]
外键的 ON DELETE 选项现在是 Oracle 反射的一部分。Oracle 不支持 ON UPDATE 级联。感谢 Miroslav Shubernetskiy 的拉取请求。 - [oracle] [bug]
修复了 cx_Oracle 断开连接检测中的错误,该错误由 pre_ping 和其他功能使用,可能会引发一个包含数字错误代码的 DatabaseError;以前我们在这种情况下没有检查断开连接代码。
参考:#4182
tests
- [tests] [bug]
在 1.2 中添加的一个测试,旨在确认 Python 2.7 行为,结果只确认了 Python 2.7.8 的行为。Python bug #8743 仍然影响 Python 2.7.7 及更早版本中的集合比较,因此涉及 AssociationSet 的相关测试不再适用于这些较旧的 Python 2.7 版本。
参考:#3265
misc
- [bug] [pool]
修复了一个相当严重的连接池错误,即在用户定义的DisconnectionError
或由于 1.2 版本发布的“pre_ping”功能导致刷新后获取的连接,如果连接通过弱引用清理(例如,前端对象被垃圾回收)返回到池中,则不会正确重置;弱引用仍将指向先前失效的 DBAPI 连接,而将重置操作错误地调用在其上。这将导致日志中的堆栈跟踪和连接被检入池中而未被重置,这可能导致锁定问题。
此更改也回溯到:1.1.16
参考:#4184
1.2.2
发布日期:2018 年 1 月 24 日
orm
- [orm] [bug]
修复了 1.2 版本关于新的 bulk_replace 事件的回归,其中当批量赋值将对象分配给新所有者时,反向引用将无法从先前所有者中删除对象。
参考:#4171
mysql
- [mysql] [bug]
为引用目的向 MySQL 方言添加了更多 MySQL 8.0 保留字。感谢 Riccardo Magliocchetti 的拉取请求。
mssql
- [mssql] [bug]
将 ODBC 错误代码 10054 添加到作为 ODBC / MSSQL 服务器断开连接的错误代码列表中。
参考:#4164
oracle
- [oracle] [bug]
cx_Oracle 方言现在无条件地在使用 NVARCHAR2 数据类型时调用 setinputsizes(),在 SQLAlchemy 中对应于 sqltypes.Unicode()。根据 cx_Oracle 的作者,这允许在 Oracle 客户端中发生正确的转换,而不管 NLS_NCHAR_CHARACTERSET 的设置如何。
参考:#4163
orm
- [orm] [bug]
修复了 1.2 版本关于新的 bulk_replace 事件的回归,其中当批量赋值将对象分配给新所有者时,反向引用将无法从先前所有者中删除对象。
参考:#4171
mysql
- [mysql] [bug]
为引用目的向 MySQL 方言添加了更多 MySQL 8.0 保留字。感谢 Riccardo Magliocchetti 的拉取请求。
mssql
- [mssql] [bug]
将 ODBC 错误代码 10054 添加到作为 ODBC / MSSQL 服务器断开连接的错误代码列表中。
参考:#4164
oracle
- [oracle] [bug]
cx_Oracle 方言现在无条件地在使用 NVARCHAR2 数据类型时调用 setinputsizes(),在 SQLAlchemy 中对应于 sqltypes.Unicode()。根据 cx_Oracle 的作者,这允许在 Oracle 客户端中发生正确的转换,而不管 NLS_NCHAR_CHARACTERSET 的设置如何。
参考:#4163
1.2.1
发布日期:2018 年 1 月 15 日
orm
- [orm] [bug]
修复了在嵌套或子事务回滚期间被清除的对象,该对象还在其主键发生变化时不会被正确地从会话中移除的错误,导致在使用会话时出现后续问题。
这个更改也被回溯到:1.1.16
参考:#4151 - [orm] [bug]
修复了 pickle 格式的 Load / _UnboundLoad 对象(例如加载器选项)的回归,其中__setstate__()
为从旧格式接收的对象引发 UnboundLocalError,尽管尝试这样做。现在添加了测试以确保这样可以正常工作。
参考:#4159 - [orm] [bug]
由于#3954中的新 lazyload 缓存方案引起的回归,使用 of_type 的加载器选项的查询将导致与 TypeError 一起失败的不相关路径的延迟加载。
参考:#4153 - [orm] [bug]
修复了新的“selectin”关系加载程序中的错误,其中加载程序在加载多态对象集合时可能尝试加载不存在的关系,其中只有一些映射器包含该关系,通常在使用PropComparator.of_type()
时。
参考:#4156
sql
- [sql] [bug]
修复了Insert.values()
中的错误,其中在与Column
对象一起使用“多值”格式作为键而不是字符串时会失败。感谢 Aubrey Stark-Toller 提供的拉取请求。
这个更改也被回溯到:1.1.16
参考:#4162
mssql
- [mssql] [bug]
修复了 1.2 中修复的引用名称引用在#3785中破坏了 SQL Server 的回归,该引用明确不理解引号引用的排序名称。现在,混合大小写排序名称是否被引用或不被引用现在被推迟到方言级别的决定,以便每个方言可以直接准备这些标识符。
参考:#4154
oracle
- [oracle] [bug]
修复了从 cx_Oracle 方言中删除大多数 setinputsizes 规则对 TIMESTAMP 数据类型检索分数秒的影响的回归。
参考:#4157 - [oracle] [bug]
修复了 Oracle 导入中的回归,其中缺少逗号导致未定义的符号存在。感谢 Miroslav Shubernetskiy 提供的拉取请求。
测试
- [tests] [bug]
从公共测试套件中删除了一个干扰第三方方言套件的特定于 Oracle 的要求规则。 - [tests] [bug]
添加了一个新的排除规则组 group_by_complex_expression,禁用使用“GROUP BY ”的测试,这在至少两个第三方方言中似乎不可行。
misc
- [bug] [ext]
修复了关联代理中的回归问题,原因是 #3769(允许链式 any() / has())导致的,其中针对关联代理进行 contains() 操作链式化的形式(o2m 关系,关联代理(m2o 关系,m2o 关系))会导致在链的最后一环重新应用 contains() 时引发错误。
参考:#4150
orm
- [orm] [bug]
修复了在嵌套或子事务回滚期间从会话中正确移除在其主键发生变化的对象时,对象不会被正确移除而导致后续使用会话时出现问题的错误。
此更改也已回溯至:1.1.16
参考:#4151 - [orm] [bug]
修复了 pickle 格式的 Load / _UnboundLoad 对象(例如加载器选项)的回归问题,其中 pickle 格式发生变化,而__setstate__()
对于从旧格式接收的对象引发 UnboundLocalError,尽管尝试这样做。现在添加了测试以确保其正常工作。
参考:#4159 - [orm] [bug]
修复了由 #3954 中新的延迟加载缓存方案引起的回归问题,其中使用带有 of_type 的 loader 选项的查询会导致与无关路径的延迟加载失败并引发 TypeError。
参考:#4153 - [orm] [bug]
修复了新的“selectin”关系加载器中的错误,其中加载器在加载多态对象集合时可能尝试加载不存在的关系,通常在使用PropComparator.of_type()
时会出现这种情况。
参考:#4156
sql
- [sql] [bug]
修复了Insert.values()
中的错误,其中在使用“多值”格式与Column
对象作为键而不是字符串时会失败。感谢 Aubrey Stark-Toller 提交的拉取请求。
此更改也已回溯至:1.1.16
参考:#4162
mssql
- [mssql] [bug]
修复了 1.2 版本中的回归问题,即在#3785中修复的排序名称引号在 SQL Server 中出现问题,因为 SQL Server 明确不理解带引号的排序名称。现在,混合大小写排序名称是否带引号取决于方言级别的决定,以便每个方言可以直接准备这些标识符。
参考:#4154
Oracle
- [Oracle] [错误]
修复了一个回归问题,即从 cx_Oracle 方言中删除大多数 setinputsizes 规则影响了 TIMESTAMP 数据类型检索分数秒的能力。
参考:#4157 - [Oracle] [错误]
修复了 Oracle 导入中的回归问题,其中缺少逗号导致出现未定义的符号。感谢 Miroslav Shubernetskiy 的拉取请求。
测试
- [测试] [错误]
从公共测试套件中删除了一个特定于 Oracle 的要求规则,该规则干扰了第三方方言套件。 - [测试] [错误]
添加了一个新的排除规则组 group_by_complex_expression,禁用了使用“GROUP BY ”的测试,这似乎对至少两个第三方方言不可行。
杂项
- [错误] [扩展]
修复了关联代理中的回归问题,由于#3769(允许链式 any() / has())导致的问题,其中对关联代理进行 contains()操作链式调用形式(o2m 关系,associationproxy(m2o 关系,m2o 关系))会导致关于在链的最终链接上重新应用 contains()的错误。
参考:#4150
SqlAlchemy 2.0 中文文档(六十一)(4)https://developer.aliyun.com/article/1560912