1.1 更新日志

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

1.1.17

发布日期: 2018 年 2 月 22 日
  • [错误] [ext]

    修复了在 1.2.3 和 1.1.16 中关于关联代理对象引起的回退,修改了 #4185 的方法,当计算关联代理的“所有者类”时,如果代理对象没有直接与映射类关联(例如 mixin),则默认选择当前类。

    参考: #4185

1.1.16

发布日期: 2018 年 2 月 16 日

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] [错误]

    sqlalchemy.sqlalchemy.sql. 命名空间中添加了 nullsfirst()nullslast() 作为顶级导入。拉取请求由 Lele Gaifax 提供。

  • [sql] [错误]

    修复了 Insert.values() 中的错误,其中将“多值”格式与 Column 对象作为键而不是字符串结合使用会失败。拉取请求由 Aubrey Stark-Toller 提供。

    参考: #4162

postgresql

  • [postgresql] [错误]

    将 “SSL SYSCALL error: Operation timed out” 添加到 psycopg2 驱动程序的 “断开连接” 场景的触发消息列表中。拉取请求由 André Cruz 提供。

  • [postgresql] [错误]

    将 “TRUNCATE” 添加到 PostgreSQL 方言接受的作为 “自动提交” 触发关键字的关键字列表中。拉取请求由 Jacob Hayes 提供。

mysql

  • [mysql] [错误]

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

    参考: #4136

misc

  • [错误] [连接池]

    修复了一个相当严重的连接池错误,其中在用户定义的 DisconnectionError 导致刷新后或由于 1.2 版本发布的 “pre_ping” 功能而获取的连接,如果连接通过弱引用清理(例如,面向前端的对象被垃圾回收)返回到池中,则不会正确重置;弱引用仍将引用先前无效的 DBAPI 连接,该连接将错误地调用重置操作。这将导致日志中出现堆栈跟踪,并且在未重置的情况下将连接签入池中,这可能会导致锁定问题。

    参考: #4184

1.1.15

发布日期: 2017 年 11 月 3 日

orm

  • [orm] [错误] [ext]

    修复了关联代理无意中将其自身链接到 AliasedClass 对象的错误,如果它首先使用 AliasedClass 作为父对象调用,则会在后续使用时导致错误。

    参考: #4116

  • [orm] [错误]

    修复了 ORM 关系对于继承层次结构中的同级类会警告冲突的同步目标(例如,两个关系都写入同一列)的错误,其中两个关系在写入期间实际上永远不会冲突。

    参考: #4078

  • [orm] [错误]

    修复了针对单表继承实体使用的相关子查询在外部查询中无法正确呈现的错误,这是由于单继承鉴别器条件的调整不适当地将条件重新应用于外部查询。

    参考: #4103

orm declarative

  • [orm] [声明式] [错误]

    修复了在基于 AbstractConcreteBase 的层次结构中,描述符(它是映射列或关系)在刷新操作期间会被引用的错误,从而导致错误,因为该属性未映射为映射器属性。对于由 AbstractConcreteBase 添加的 “type” 列等其他属性,如果类未能在其映射器中包含 “concrete=True”,也可能出现类似的问题,但是此处的检查也应防止这种情况引起问题。

    参考: #4124

sql

  • [sql] [错误]

    修复了如果参数是元组,则 ColumnDefault__repr__ 会失败的错误。拉取请求由 Nicolas Caniart 提供。

    参考: #4126

  • [sql] [错误]

    修复了最近添加的 ColumnOperators.any_()ColumnOperators.all_() 方法在作为方法调用时(而不是使用独立函数 any_()all_() 时)不起作用的错误。还为这些相对不直观的 SQL 运算符添加了文档示例。

    参考: #4093

postgresql

  • [postgresql] [错误]

    进一步修复了 ARRAY 类与 COLLATE 结合使用的问题,因为在 #4006 中进行的修复未能适应多维数组。

    参考: #4006

  • [postgresql] [错误]

    修复了 array_agg 函数中的错误,其中传递已经是 ARRAY 类型的参数,例如 PostgreSQL array 构造,将产生 ValueError,这是由于该函数尝试嵌套数组。

    参考: #4107

  • [postgresql] [错误]

    修复了 PostgreSQL Insert.on_conflict_do_update() 中的错误,该错误会阻止将插入语句用作 CTE,例如通过 Insert.cte() 在另一个语句中。

    参考: #4074

mysql

  • [mysql] [错误]

    当检测到 MariaDB 10.2.8 或更早版本(在 10.2 系列中)时发出警告,因为这些版本中的 CHECK 约束存在重大问题,这些问题已在 10.2.9 中解决。

    请注意,此更新日志消息未与 SQLAlchemy 1.2.0b3 一起发布,而是追溯添加的。

    参考: #4097

  • [mysql] [错误]

    MySQL 5.7.20 现在警告使用 @tx_isolation 变量;现在执行版本检查,并使用 @transaction_isolation 代替以防止此警告。

    参考: #4120

  • [mysql] [错误]

    修复了由于语法更改,CURRENT_TIMESTAMP 在 MariaDB 10.2 系列中无法正确反映的问题,其中该函数现在表示为 current_timestamp()

    参考: #4096

  • [mysql] [错误]

    MariaDB 10.2 现在支持 CHECK 约束(警告:由于 #4097 中指出的上游问题,请使用 10.2.9 或更高版本)。当 CHECK 约束存在于 SHOW CREATE TABLE 输出中时,反射现在会考虑这些 CHECK 约束。

    参考: #4098

sqlite

  • [sqlite] [错误]

    修复了如果引用的表位于远程模式中(例如,在 SQLite 上,远程数据库由 ATTACH 引用),则 SQLite CHECK 约束反射会失败的错误。

    参考: #4099

mssql

  • [mssql] [错误]

    为 SQL Server 的 PyODBC 方言添加了全方位的 “连接关闭” 异常代码,包括 ‘08S01’、‘01002’、‘08003’、‘08007’、‘08S02’、‘08001’、‘HYT00’、‘HY010’。以前,仅涵盖 ‘08S01’。

    参考: #4095

1.1.14

发布日期: 2017 年 9 月 5 日

orm

  • [orm] [错误]

    修复了 Session.merge() 中的错误,该错误与 #4030 的错误类似,其中身份映射中目标对象的内部检查可能会导致错误,如果它在合并例程实际检索对象之前立即被垃圾回收。

    参考: #4069

  • [orm] [错误]

    修复了如果 undefer_group() 选项从使用连接迫切加载加载的关系扩展,则无法识别该选项的错误。此外,由于该错误导致执行过多的工作,因此在结果集列的初始计算中,Python 函数调用计数也提高了 20%,从而补充了 #3915 的连接迫切加载改进。

    参考: #4048

  • [orm] [错误]

    修复了 ORM 身份映射中的竞争条件,该条件会导致在加载操作期间不适当地删除对象,从而导致重复的对象身份出现,尤其是在涉及对象去重的连接迫切加载下。该问题特定于弱引用的垃圾回收,并且仅在 PyPy 解释器下观察到。

    参考: #4068

  • [orm] [错误]

    修复了 Session.merge() 中的错误,其中集合中对于通常自动递增的键将主键属性设置为 None 的对象将被视为数据库持久化键,以用于内部去重过程的一部分,从而导致数据库中仅实际插入一个对象。

    参考: #4056

  • [orm] [错误]

    synonym() 用于针对不是 MapperProperty 的属性(例如关联代理)时,会引发 InvalidRequestError。以前,会发生递归溢出,试图查找不存在的属性。

    参考: #4067

sql

  • [sql] [错误]

    更改了窗口函数的范围规范,以允许范围中出现两个相同的 PRECEDING 或 FOLLOWING 关键字,方法是允许范围的左侧为正数,右侧为负数,例如 (1, 3) 是 “1 FOLLOWING AND 3 FOLLOWING”。

    参考: #4053

1.1.13

发布日期: 2017 年 8 月 3 日

oracle

  • [oracle] [错误] [性能] [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] [错误]

    修复了 1.1.11 版本的回退,其中向包含具有子查询加载关系的实体的查询添加额外的非实体列将失败,这是由于 1.1.11 版本中由于 #4011 而添加的检查。

    参考: #4033

  • [orm] [错误]

    修复了 1.1 版本中作为 #3514 一部分添加的 JSON NULL 评估逻辑中的错误,其中该逻辑无法适应与映射的 Column 名称不同的 ORM 映射属性。

    参考: #4031

  • [orm] [错误]

    WeakInstanceDict 中的所有方法添加了 KeyError 检查,其中 key in dict 的检查之后是对该键的索引访问,以防止在负载下与垃圾回收竞争,这可能会在代码假设其存在后从 dict 中删除键,从而导致非常罕见的 KeyError 异常。

    参考: #4030

oracle

  • [oracle] [功能] [postgresql]

    Sequence 添加了新的关键字 Sequence.cacheSequence.order,以允许渲染 Oracle 和 PostgreSQL 理解的 CACHE 参数,以及 Oracle 理解的 ORDER 参数。Pull request 由 David Moore 友情提供。

tests

  • [tests] [bug] [py3k]

    修复了测试 fixtures 中的问题,该问题与 Python 3.6.2 中关于上下文管理器的一个更改不兼容。

    此更改也已向后移植到:1.0.18

    参考:#4034

1.1.11

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

orm

  • [orm] [bug]

    修复了子查询预加载的问题,该问题延续了在 #2699#3106#3893 中修复的一系列问题,涉及从连接的继承子类开始,然后子查询预加载到基类的关系时,“子查询”包含正确的 FROM 子句,而查询还包括针对子类的条件。先前 ticket 中的修复程序未考虑从第一级更深入加载的额外 subqueryload 操作,因此修复程序已进一步推广。

    参考:#4011

sql

  • [sql] [bug]

    修复了在 WithinGroup 构造的结构迭代期间会发生的 AttributeError。

    参考:#4012

postgresql

  • [postgresql] [bug]

    继续修复在 1.1.8 中正确处理 PostgreSQL 版本字符串 “10devel” 的问题,额外的 regexp 提升以处理 “10beta1” 形式的版本字符串。虽然 PostgreSQL 现在提供了更好的方法来获取此信息,但为了最大程度地降低与旧版或备用 PostgreSQL 数据库的兼容性风险,我们至少在 1.1.x 版本中坚持使用 regexp。

    参考:#4005

  • [postgresql] [bug]

    修复了将带有排序规则的字符串类型与 ARRAY 一起使用时,无法在 CREATE TABLE 中生成正确语法的问题。

    参考: #4006

mysql

  • [mysql] [bug]

    MySQL 5.7 引入了对 “SHOW VARIABLES” 命令的权限限制;MySQL dialect 现在将处理 SHOW 未返回任何行的情况,特别是对于 SQL_MODE 的初始获取,并将发出警告,应修改用户权限以允许该行存在。

    参考:#4007

mssql

  • [mssql] [bug]

    修复了使用 Azure 数据仓库时,SQL Server 事务隔离必须从不同的视图中获取的错误,现在将尝试针对两个视图进行查询,如果失败仍然发生,则无条件引发 NotImplemented,以便为未来新 SQL Server 版本中的任意 API 更改提供最佳弹性。

    参考:#3994

  • [mssql] [bug]

    向 SQL Server dialect 添加了占位符类型 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]

    修复了诸如 “delete-orphan”(以及其他级联)之类的级联无法找到链接到继承关系中子类本地的关系的对象的问题,从而导致操作未发生。

    参考:#3986

schema

  • [schema] [bug]

    如果创建 ForeignKeyConstraint 对象时,“local” 和 “remote” 列的数量不匹配,现在会引发 ArgumentError,否则会导致约束的内部状态不正确。请注意,这也影响到 dialect 的反射过程为外键约束生成一组不匹配的列的情况。

    参考:#3949

postgresql

  • [postgresql] [bug]

    为 GRANT、REVOKE 关键字添加了 “autocommit” 支持。Pull request 由 Jacob Hayes 友情提供。

mysql

  • [mysql] [bug]

    删除了对 UTC_TIMESTAMP MySQL 函数的古老且不必要的拦截,该拦截妨碍了将其与参数一起使用。

    参考:#3966

  • [mysql] [bug]

    修复了 MySQL dialect 中关于在渲染 CREATE TABLE 时结合 PARTITION 选项渲染表选项的错误。PARTITION 相关选项需要遵循表选项,而以前没有强制执行此顺序。

    参考:#3961

oracle

  • [oracle] [bug]

    修复了 cx_Oracle dialect 中由于 “b” 字符导致 cx_Oracle 版本 6.0b1 的版本字符串解析失败的错误。版本字符串解析现在通过 regexp 而不是简单的 split 进行。

    参考:#3975

misc

  • [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 with RETURNING 未返回任何行的情况下,autoclose 发生在此先前不存在的用例中,导致通常在 INSERT/UPDATE/DELETE 时无条件发生的自动提交行为失败。

    参考:#3955

misc

  • [bug] [ext]

    修复了由于 #3950 在 1.1.8 中发布的回归,其中在 “schema type” 或 TypeDecorator 的情况下,更深层次地搜索有关列类型的信息,如果映射还包含 column_property,则会产生属性错误。

    参考:#3956

1.1.8

发布日期:2017 年 3 月 31 日

postgresql

  • [postgresql] [bug]

    添加了对解析开发版本(如 “PostgreSQL 10devel”)的 PostgreSQL 版本字符串的支持。Pull request 由 Sean McCully 友情提供。

misc

  • [bug] [ext]

    修复了 sqlalchemy.ext.mutable 中的错误,其中 Mutable.as_mutable() 方法不会跟踪使用 TypeEngine.copy() 复制的类型。与 1.0 相比,这在 1.1 中变得更像一个回归,因为 TypeDecorator 类现在是 SchemaEventTarget 的子类,除其他外,这向父 Column 指示当 Column 被复制时,应复制该类型。当将 declarative 与 mixins 或抽象类一起使用时,这些副本很常见。

    参考:#3950

  • [bug] [ext]

    Result.count() 方法添加了对绑定参数的支持,例如通常通过 Query.params() 设置的参数。以前,省略了对参数的支持。Pull request 由 Pat Deegan 友情提供。

1.1.7

发布日期:2017 年 3 月 27 日

orm

  • [orm] [feature]

    现在可以将 aliased() 构造传递给 Query.select_entity_from() 方法。实体将从 aliased() 构造表示的可选择对象中拉取。这允许将 aliased() 的特殊选项(例如 aliased.adapt_on_names)与 Query.select_entity_from() 结合使用。

    参考:#3933

  • [orm] [bug]

    修复了在线程环境下可能发生的竞争条件,这是由于通过 #3915 添加的缓存导致的。Column 对象的内部集合可能会在别名对象上不适当地重新生成,当连接的预加载器尝试渲染 SQL 并收集结果时,会造成混淆,并导致属性错误。现在,在别名对象被缓存并在线程之间共享之前,预先生成集合。

    参考:#3947

engine

  • [engine] [bug]

    添加了一个异常处理程序,当 Connection 的 “autorollback” 功能本身引发异常时,该处理程序将警告 Py2K 上的 “cause” 异常。在 Py3K 中,解释器自然会将这两个异常报告为一个异常在处理另一个异常期间发生。这延续了回滚失败处理的一系列更改,这些更改最后一次作为 1.0.12 中 #2696 的一部分访问。

    参考:#3946

sql

  • [sql] [bug] [postgresql]

    添加了对 VariantSchemaType 对象相互兼容的支持。也就是说,可以针对像 Enum 这样的类型创建 variant,并且根据 variant 的 dialect 映射,创建约束和/或数据库特定类型对象的指令将正确传播。

    参考:#2892

  • [sql] [bug]

    修复了编译器中的错误,其中 savepoint 的字符串标识符将缓存在标识符引用字典中;由于这些标识符是任意的,如果单个 Connection 使用了无限数量的 savepoint,以及如果 savepoint 子句构造直接与无限数量的 savepoint 名称一起使用,则可能会发生少量内存泄漏。内存泄漏影响绝大多数情况,因为通常 Connection(它使用从 “1” 开始的简单计数器渲染 savepoint 名称)在每次事务或固定数量的事务基础上使用,然后在被丢弃之前使用。

    参考:#3931

  • [sql] [bug]

    修复了新的 “schema translate” 功能中的错误,其中当与列表达式一起渲染时,翻译后的 schema 名称将以别名名称的形式调用;仅当源翻译名称为 “None” 时才会发生。“schema translate” 功能现在仅对 SchemaItemSchemaType 子类生效,即与数据库中 DDL 可创建结构对应的对象。

    参考:#3924

oracle

  • [oracle] [bug]

    修复了 cx_Oracle 的 WITH_UNICODE 模式,该模式被 cx_Oracle 5.3 现在似乎在构建中硬编码此标志的事实所揭示;使用此模式的内部方法未使用正确的签名。

    此更改也已向后移植到:1.0.18

    参考:#3937

1.1.6

发布日期:2017 年 2 月 28 日

orm

  • [orm] [bug]

    解决了自早期版本以来由于抽象程度提高而累积的连接预加载器查询构造系统中的一些长期未解决的性能问题。每个查询使用临时的 AliasedClass 对象,每次都会产生大量的列查找开销,已被缓存方法取代,该方法使用少量 AliasedClass 对象池,这些对象在连接预加载的调用之间重用。还优化了一些涉及预加载连接路径构造的机制。在最坏情况的连接加载器场景中,端到端查询构造 + 单行提取测试的调用计数与 1.1.5 相比减少了约 60%,与 0.8.6 相比减少了 42%。

    参考:#3915

  • [orm] [bug]

    修复了 “eager_defaults” 功能中的一个主要低效问题,即对于 ORM 已显式插入 NULL 的列值,将发出不必要的 SELECT,这对应于对象上未设置但未指定任何服务器默认值的属性,以及更新时过期的属性,但无论如何都未设置服务器 onupdate。由于这些列不属于 eager_defaults 尝试使用的 RETURNING,因此也不应进行后 SELECT。

    参考:#3909

  • [orm] [bug]

    修复了两个密切相关的错误,涉及 mapper eager_defaults 标志与单表继承结合使用;一个是在 eager defaults 获取期间,eager defaults 逻辑会无意中尝试访问属于 mapper 的 “exclude_properties” 列表(声明式单表继承使用)的列,另一个是为获取默认值而完全加载行将无法使用正确的继承 mapper。

    参考:#3908

  • [orm] [bug]

    修复了自 0.9.7 版本以来作为 #3106 的结果首次引入的错误,该错误会导致针对别名实体的某些形式的多级子查询加载中出现不正确的查询,并且在最内层子查询中出现不必要的额外 FROM 实体。

    参考:#3893

orm declarative

  • [orm] [declarative] [bug]

    修复了声明式的 “自动排除” 功能中的错误,该功能确保单表继承子类本地的列不会作为属性出现在基类的其他派生类上,对于从基类进行多级子类化的情况,该功能不会生效。

    参考:#3895

sql

  • [sql] [bug]

    修复了 DDLEvents.column_reflect() 事件不允许将非文本表达式作为新列的 “default” 值传递的错误,例如 FetchedValue 对象以指示通用触发默认值或 text() 构造。还在此方面澄清了文档。

    参考:#3905

postgresql

  • [postgresql] [bug]

    为 “IMPORT FOREIGN SCHEMA”、“REFRESH MATERIALIZED VIEW” PostgreSQL 语句添加了正则表达式,以便它们在没有显式事务的情况下通过连接或 engine 调用时自动提交。Pull request 由 Frazer McLean 和 Paweł Stiasny 友情提供。

    参考:#3804

  • [postgresql] [bug]

    修复了 PostgreSQL ExcludeConstraint 中的错误,其中 “whereclause” 和 “using” 参数在诸如 Table.tometadata() 之类的操作期间不会被复制。

    参考:#3900

mysql

  • [mysql] [bug]

    为 MySQL dialect 添加了新的 MySQL 8.0 保留字,以进行正确的引用。Pull request 由 Hanno Schlichting 友情提供。

mssql

  • [mssql] [bug]

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

    参考:#3898

misc

  • [feature] [ext]

    向 “baked” 查询系统添加了 Result.scalar()Result.count()

    参考:#3896

  • [bug] [ext]

    修复了新的 sqlalchemy.ext.indexable 扩展中的错误,其中设置本身引用另一个属性的属性将失败。

    参考:#3901

1.1.5

发布日期:2017 年 1 月 17 日

orm

  • [orm] [bug]

    修复了当也使用多态继承时,针对多个实体进行连接预加载的错误,该错误会抛出 “‘NoneType’ object has no attribute ‘isa’”。该问题是由 #3611 的修复程序引入的。

    此更改也已向后移植到:1.0.17

    参考:#3884

  • [orm] [bug]

    修复了子查询加载中的错误,其中作为 “现有” 行遇到的对象(例如,已从同一查询中的不同路径加载)不会为指定此加载的未加载属性调用子查询加载器。此问题与 #3431#3811 的问题在同一区域,这些问题涉及连接加载的类似问题。

    参考:#3854

  • [orm] [bug]

    Session.no_autoflush 上下文管理器现在确保在 “finally” 块中重置 autoflush 标志,以便如果在块内引发异常,状态仍然会适当地重置。Pull request 由 Emin Arakelian 友情提供。

  • [orm] [bug]

    修复了在 Bundle 构造用作选择条件的情况下,单表继承查询条件不会插入到查询中的错误。

    参考:#3874

  • [orm] [bug]

    修复了与 #3177 相关的错误,其中 Query 发出的 UNION 或其他集合操作会将 “单继承” 条件应用于 union 的外部(也引用了错误的可选择对象),即使此条件现在应已存在于内部子查询中。一旦对 Query 调用 union() 或另一个集合操作,单继承条件现在将被省略,其方式与 Query.from_self() 相同。

    参考:#3856

examples

  • [examples] [bug]

    修复了 versioned_history 示例中的两个问题,一个是历史表现在获得 autoincrement=False 以避免 1.1 关于带有自增量复合主键的新错误;另一个是现在使用 sqlite_autoincrement 标志以确保在 SQLite 上,即使删除某些行,唯一标识符也用于表的生命周期。Pull request 由 Carlos García Montoro 友情提供。

    参考:#3872

engine

  • [engine] [bug]

    Table 反射的 “extend_existing” 选项会导致索引和约束在与 MetaData.reflect() 一起使用时(如 automap 扩展所做的那样)加倍,这是由于表在外键路径中以及直接被反射两次。一个新的去重集合在 MetaData.reflect() 序列中传递,以防止以这种方式进行双重反射。

    参考:#3861

sql

  • [sql] [bug]

    修复了最初在 0.9 版本中通过 #1068 引入的错误,该错误导致 order_by(<some Label()>) 会仅基于名称对标签名称进行排序,也就是说,即使标记的表达式与 selectable 中隐式或显式存在的其他表达式完全不同。现在,按标签排序的逻辑确保了标记的表达式与解析为该名称的表达式相关,然后再按标签名称排序;此外,该名称必须解析为表达式中其他位置显式声明的实际标签,而不仅仅是列名。此逻辑与 order by(文本名称) 功能仔细地分开,后者的目的略有不同。

    参考链接: #3882

  • [sql] [bug]

    修复了 1.1 版本的回归错误,即由于 any_all_ 函数的拼写错误,import * 对 sqlalchemy.sql.expression 无效。

    参考链接: #3878

  • [sql] [bug]

    MetaData.reflect() 中“could not reflect”异常中嵌入的引擎 URL 现在会隐藏密码;此外,TLEngine__repr__ 现在的行为类似于 Engine,也会隐藏 URL 密码。此拉取请求由 Valery Yundin 提供。

  • [sql] [bug]

    修复了 Variant 中的问题,其中从 TypeDecorator 继承的“右侧强制转换”逻辑会将右侧强制转换为 Variant 本身,而不是 Variant 的默认类型应该执行的操作。在 Variant 的情况下,我们希望该类型的作用方式主要类似于基本类型,因此现在覆盖了 TypeDecorator 的默认逻辑,以回退到基础包装类型的逻辑。目前主要与 JSON 相关。

    参考链接: #3859

  • [sql] [bg]

    修复了 Insert 构造的 “multiple values” 功能不遵循 literal_binds 编译器标志的错误;后续值现在呈现为字面量。

    参考链接: #3880

postgresql

  • [postgresql] [bug]

    修复了新的 “ON CONFLICT DO UPDATE” 功能中的错误,其中 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 方言会尝试从 SELECT 中选择最后一行标识的错误,这在 SELECT 没有行的情况下会失败。对于此类语句,inline 标志设置为 True,表示不应获取最后一个主键。

    参考链接: #3876

oracle

  • [oracle] [bug] [postgresql]

    修复了当源表包含自增序列时,从 SELECT 插入数据会导致编译失败的错误。

    参考链接: #3877

  • [oracle] [bug]

    修复了在 Oracle 9.2 的 ALL_TABLES 查询中使用了 “COMPRESSION” 关键字的错误;即使 Oracle 文档声明表压缩是在 9i 中引入的,但实际的列直到 10.1 才出现。

    参考链接: #3875

misc

  • [bug] [py3k]

    修复了与 Python 3.6 中未带 ‘r’ 修饰符的转义字符串相关的 DeprecationWarning,并为 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() 中的错误,其中备用名称的主键属性无法正确跟踪到 UPDATE 语句中。

    此更改也已向后移植到: 1.0.16

    参考链接: #3849

  • [orm] [bug]

    修复了 Session.bulk_save() 中的错误,其中 UPDATE 无法与实现版本 ID 计数器的映射一起正常工作。

    此更改也已向后移植到: 1.0.16

    参考链接: #3781

  • [orm] [bug]

    修复了当在首次调用这些访问器后将映射器属性或其他 ORM 构造添加到映射器/类时,Mapper.attrsMapper.all_orm_descriptors 和其他派生属性无法刷新的错误。

    此更改也已向后移植到: 1.0.16

    参考链接: #3778

  • [orm] [bug]

    修复了由于 #3457 导致的集合中的回归错误,由此在 pickle 或 deepcopy 期间反序列化将无法建立 ORM 集合的所有属性,从而导致进一步的突变操作失败。

    参考链接: #3852

  • [orm] [bug]

    修复了长期存在的错误,其中 “noload” 关系加载策略会导致 backrefs 和/或 back_populates 选项被忽略。

    参考链接: #3845

engine

  • [engine] [bug]

    Connection 中删除了长期失效的 “default_schema_name()” 方法。此方法是旧版本遗留下来的,并且无法工作(例如,会引发异常)。此拉取请求由 Benjamin Dopplinger 提供。

sql

  • [sql] [bug]

    修复了当在小写的 table() 构造上调用时,针对在没有自增设置的情况下插入主键而新添加的警告(参见 #3216)无法正确发出的错误。

    参考链接: #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 类型支持发送任何无效值,并会返回一个空字符串作为响应。已向 ENUM 的 MySQL 实现添加了一个硬编码规则来检查 “是否返回空字符串”,以便将此空字符串返回给应用程序,而不是将其作为无效值拒绝。请注意,如果您的 MySQL enum 将值链接到对象,您仍然会收到空字符串。

    参考链接: #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

1.1.3

发布日期: 2016 年 10 月 27 日

orm

  • [orm] [bug]

    修复了由 #2677 引起的回归错误,其中在会话中已刷新为已删除的对象上调用 Session.delete() 将无法在标识映射中设置对象(或拒绝该对象),从而导致刷新错误,因为该对象处于工作单元无法容纳的状态。在这种情况下,已恢复 1.1 之前的行为,即将对象放回标识映射中,以便再次尝试 DELETE 语句,这将发出警告,指示预期的行数不匹配(除非该行在会话外部恢复)。

    参考链接: #3839

  • [orm] [bug]

    修复了回归错误,其中某些 Query 方法(如 Query.update() 和其他方法)如果 Query 是针对一系列映射列而不是整个映射实体,则会失败。

    参考链接: #3836

sql

  • [sql] [bug]

    修复了涉及 Enum 中新值转换和验证功能的错误,其中在字符串连接中使用 enum 对象会将 Enum 类型保持为表达式的整体类型,从而产生缺少查找。针对 Enum 类型列的字符串连接现在使用 String 作为表达式本身的数据类型。

    参考链接: #3833

  • [sql] [bug]

    修复了作为 #2919 的副作用发生的回归错误,在用户定义的 TypeDecorator 的不太典型的情况下,该 TypeDecorator 本身也是 SchemaType 的实例(而不是实现方式),这将导致跳过类型本身的列附加事件。

    参考链接: #3832

postgresql

  • [postgresql] [bug]

    PostgreSQL 表反射将确保在反射非 Integer 数据类型的主键列时,Column.autoincrement 标志设置为 False,即使默认值与整数生成序列相关也是如此。如果列创建为 SERIAL 并且数据类型已更改,则可能会发生这种情况。在 1.1 系列中,autoincrement 标志只有在数据类型为整数亲缘性时才能为 True。

    参考链接: #3835

1.1.2

发布日期: 2016 年 10 月 17 日

orm

  • [orm] [bug]

    修复了涉及禁用多对一延迟加载器另一侧的连接集合预加载器的规则的错误,该规则最初在 #1495 中添加,其中如果父对象具有与其关联的其他延迟加载器绑定的查询选项,则该规则将失败。

    参考链接: #3824

  • [orm] [bug]

    修复了自引用实体、延迟列加载问题,其风格类似于 #3431#3811,其中由于自引用预加载,实体在行中存在于多个位置;当延迟加载器仅应用于其中一个路径时,“present” 列加载器现在将覆盖该实体的延迟非加载,而与行顺序无关。

    参考链接: #3822

sql

  • [sql] [bug]

    修复了由新添加的函数引起的回归,该函数执行 sql DefaultGenerator 对象的 “wrap callable” 功能,当默认可调用对象是 functools.partial 或其他没有 __module__ 属性的对象时,引发了 __module__ 的属性错误。

    参考链接: #3823

  • [sql] [bug] [postgresql]

    修复了 Enum 类型中的回归错误,其中由于作为 #3250 一部分添加的冲突 copy() 方法,在复制类型对象的情况下未传输事件处理程序。当复制列时(例如在 tometadata() 中或将声明性 mixin 与列一起使用时),通常会发生此复制。事件处理程序不存在会影响为非原生枚举类型创建的约束,但更严重的是 PostgreSQL 后端上的 ENUM 对象。

    参考链接: #3827

postgresql

  • [postgresql] [bug] [sql]

    更改了为 multi-VALUES insert 语句生成绑定参数时使用的命名约定,以便编号的参数名称不会与 WHERE 子句的匿名参数冲突,这在 PostgreSQL ON CONFLICT 构造中现在很常见。

    参考链接: #3828

1.1.1

发布日期: 2016 年 10 月 7 日

mssql

  • [mssql] [bug]

    #3810#3814 中添加的 “SELECT SERVERPROPERTY” 查询在 Pyodbc 和 SQL Server 的未知组合上失败。虽然此功能的失败是预料之中的,但异常捕获不够广泛,因此现在它可以捕获 pyodbc.Error 的所有形式。

    参考链接: #3820

misc

1.1.0

发布日期: 2016 年 10 月 5 日

orm

  • [orm] [feature]

    增强了新的 “raise” 延迟加载器策略,使其还包括 “raise_on_sql” 变体,可通过 relationship.lazyraiseload() 获得。此变体仅在延迟加载实际发出 SQL 时引发异常,而不是在完全调用延迟加载器机制时引发异常。

    参考链接: #3812

  • [orm] [feature]

    Query.group_by() 方法现在在传递 None 参数时会重置 group by 集合,就像 Query.order_by() 长期以来的工作方式一样。此拉取请求由 Iuri Diniz 提供。

  • [orm] [change]

    为了取消所有 order by,将 False 传递给 Query.order_by() 已被弃用;使用 False 或 None 调用此方法不再有任何区别。

  • [orm] [bug]

    修复了连接预加载对于多态加载的映射器会失败的错误,其中 polymorphic_on 设置为未映射的表达式,例如 CASE 表达式。

    此更改也已向后移植到: 1.0.16

    参考链接: #3800

  • [orm] [bug]

    修复了当通过 Session.bind_mapper(), Session.bind_table() 或构造函数向 Session 发送无效绑定时,ArgumentError 无法正确引发的错误。

    此更改也已向后移植到: 1.0.16

    参考链接: #3798

  • [orm] [bug]

    修复了子查询预加载中的一个错误,当 "of_type()" 对象的子查询加载链接到普通映射类的第二个子查询加载,或者更长的几个 "of_type()" 属性链时,会错误地链接连接。

    此更改也被向后移植到: 1.0.15

    参考链接: #3773, #3774

  • [orm] [bug]

    ORM 属性现在可以被赋值任何具有 __clause_element__() 属性的对象,这将产生内联 SQL,就像任何 ClauseElement 类一样。 这涵盖了其他未被进一步表达式构造转换的映射属性。

    参考链接: #3802

  • [orm] [bug]

    对 [ticket:3431] 中首次引入的错误修复进行了调整,该修复涉及对象在单个结果集中出现在多个上下文中,以便将相关对象值设置为 None 的预加载器仍然会触发,从而满足该属性的加载。 之前,该调整仅在辅助行中为预加载属性接收到非 None 值时才有效。

    参考链接: #3811

  • [orm] [bug]

    修复了新的 SessionEvents.persistent_to_deleted() 事件中的一个错误,即目标对象可能在事件触发之前被垃圾回收。

    参考链接: #3808

  • [orm] [bug]

    relationship() 构造的主连接现在可以包含一个 bindparam() 对象,该对象包含一个可调用函数来生成值。 以前,延迟加载策略与此用法不兼容,并且还会错误地检测是否应使用 “use_get” 标准(如果主键与绑定参数有关)。

    参考链接: #3767

  • [orm] [bug]

    ORM flush 进程发出的 UPDATE 现在可以容纳对象主键中列的 SQL 表达式元素,如果目标数据库支持 RETURNING 以提供新值,或者为了触发列上的某些其他触发器/onupdate 而将 PK 值设置为 “自身”。

    参考链接: #3801

  • [orm] [bug]

    修复了一个错误,即如果关系的 primaryjoin 具有多个由 AND 分隔的子句,并且这些子句的顺序与每个子句中比较的主键列的顺序不同,则允许延迟加载从标识映射中使用 get() 的 “简单多对一” 条件将无法被调用。 这种顺序差异发生在复合外键中,其中引用侧的表绑定列在 .c 集合中的顺序与被引用侧的主键列的顺序不同……如果使用声明性 mixin 和/或 declared_attr 来设置列,则这种情况会经常发生。

    参考链接: #3788

  • [orm] [bug]

    当映射上的两个 @validates 装饰器使用相同的名称时,会引发异常。 一次只支持一个特定名称的验证器,没有机制将它们链接在一起,因为函数装饰器级别的验证器顺序无法确定。

    参考链接: #3776

  • [orm] [bug]

    configure_mappers() 期间引发的 Mapper 错误现在显式地包含异常消息中原始映射器的名称,以帮助那些包装的异常本身不包含源映射器的情况。 由 John Perkins 友情提供 Pull request。

orm declarative

  • [orm] [declarative] [change]

    构造从另一个类继承的声明性基类也将继承其文档字符串。 这意味着 as_declarative() 的行为更像是一个普通的类装饰器。

sql

  • [sql] [bug]

    修复了 Table 中的一个错误,其中内部方法 _reset_exported() 会破坏对象的状态。 此方法旨在用于可选择对象,并在某些情况下由 ORM 调用;错误的映射器配置可能会导致 ORM 在 Table 对象上调用此方法。

    此更改也被向后移植到: 1.0.15

    参考链接: #3755

  • [sql] [bug]

    执行选项现在可以从语句内部在编译时传播到最外层语句,这样,例如,如果嵌入元素想要将 “autocommit” 设置为 True,它可以将其传播到封闭语句。 目前,此功能已为 SELECT 语句中嵌入的面向 DML 的 CTE 启用,例如 SELECT 内的 INSERT/UPDATE/DELETE。

    参考链接: #3805

  • [sql] [bug]

    通过 Column.server_default 参数作为列默认值发送的字符串现在会进行引号转义。

    参考链接: #3809

  • [sql] [bug] [postgresql]

    添加了 PostgreSQL 使用的编译器级标志,以便在涉及 JSON、HSTORE 索引运算符以及其操作数的操作周围放置比通常由优先级规则生成的更多括号,因为已经观察到 PostgreSQL 至少对于 HSTORE 索引运算符的优先级规则在 9.4 和 9.5 之间不一致。

    参考链接: #3806

  • [sql] [bug] [mysql]

    BaseException 异常类现在被 Connection 的异常处理例程拦截,并包括 ConnectionEvents.handle_error() 事件的处理。 在不是 Exception 子类的系统级异常(包括 KeyboardInterrupt 和 greenlet GreenletExit 类)的情况下,Connection 现在默认情况下被无效化,以防止在处于未知且可能已损坏状态的数据库连接上发生进一步操作。 MySQL 驱动程序是此更改的主要目标,但此更改适用于所有 DBAPI。

    参考链接: #3803

  • [sql] [bug]

    “eq” 和 “ne” 运算符不再是 “结合律” 运算符列表的一部分,但它们仍然被认为是 “交换律” 运算符。 这允许像 (x == y) == z 这样的表达式在 SQL 级别使用括号来维护。 由 John Passaro 友情提供 Pull request。

    参考链接: #3799

  • [sql] [bug]

    带有未命名 Column 对象的表达式字符串化(在许多情况下发生,包括 ORM 错误报告)现在将在字符串上下文中将名称呈现为 “<name unknown>”,而不是引发编译错误。

    参考链接: #3789

  • [sql] [bug]

    当 ClauseElement 或非 SQLAlchemy 对象(不是 “可执行” 对象)错误地传递给 .execute() 时,会引发更具描述性的异常/消息;在所有情况下都会一致地引发新的 ObjectNotExecutableError 异常。

    参考链接: #3786

  • [sql] [bug] [mysql] [postgresql]

    修复了 JSON 数据类型中的回归错误,其中 JSON 索引值的 “字面处理器” 不会被调用。 本机 String 和 Integer 数据类型现在从 JSONIndexType 和 JSONPathType 内部调用。 这适用于通用、PostgreSQL 和 MySQL JSON 类型,并且还依赖于 #3766

    参考链接: #3765

  • [sql] [bug]

    修复了如果复合 SQL 表达式包装在 ORM 样式的 __clause_element__() 构造中,Index 无法从复合 SQL 表达式中提取列的错误。 此错误在 1.0.x 中也存在,但在 1.1 中更明显,因为 hybrid_property @expression 现在返回一个包装元素。

    参考链接: #3763

postgresql

  • [postgresql] [bug]

    对 ON CONFLICT 进行了调整,以便 “inserted_primary_key” 逻辑能够适应没有 INSERT 或 UPDATE 并且没有净更改的情况。 在这种情况下,该值变为 None,而不是因异常而失败。

    参考链接: #3813

  • [postgresql] [bug]

    修复了新的 PG “on conflict” 构造中的一个问题,其中列(包括 “excluded” 命名空间中的列)在语句的 WHERE 子句中不会进行表限定。

    参考链接: #3807

mysql

  • [mysql] [bug]

    添加了对解析 URL 查询字符串中 MySQL/Connector 布尔值和整数参数的支持:connection_timeout, connect_timeout, pool_size, get_warnings, raise_on_warnings, raw, consume_results, ssl_verify_cert, force_ipv6, pool_reset_session, compress, allow_local_infile, use_pure。

    此更改也被向后移植到: 1.0.15

    参考链接: #3787

  • [mysql] [bug]

    修复了 “literal_binds” 标志不会传播到 MySQL 下的 CAST 表达式的错误。

    参考链接: #3766

mssql

  • [mssql] [bug]

    更改了用于获取 “默认架构名称” 的查询,从查询数据库主体表的查询更改为使用 “schema_name()” 函数,因为据报告,前一个系统在 Azure 数据仓库版本上不可用。 希望这最终能在所有 SQL Server 版本和身份验证样式下工作。

    此更改也已向后移植到: 1.0.16

    参考链接: #3810

  • [mssql] [bug]

    更新了 pyodbc 的服务器版本信息方案,以使用 SQL Server SERVERPROPERTY(),而不是依赖于 pyodbc.SQL_DBMS_VER,后者继续不可靠,尤其是在 FreeTDS 中。

    此更改也已向后移植到: 1.0.16

    参考链接: #3814

  • [mssql] [bug]

    将错误代码 20017 “服务器意外断开连接” 添加到导致连接池重置的断开连接异常列表中。 由 Ken Robbins 友情提供 Pull request。

    此更改也已向后移植到: 1.0.16

    参考链接: #3791

misc

  • [bug] [orm.declarative]

    修复了设置连接表子类的单表继承子类(包括额外的列)会破坏映射表的外键集合的错误,从而干扰关系的初始化。

    此更改也已向后移植到: 1.0.16

    参考链接: #3797

1.1.0b3

发布日期:2016 年 7 月 26 日

orm

  • [orm] [change]

    移除了可以追溯到 0.4 的警告,该警告在同名关系放置在通过连接表或单表继承继承的两个映射器上时发出。 该警告不适用于当前的工作单元实现。

    参考链接: #3749

sql

  • [sql] [bug]

    修复了新的 CTE 功能中的一个错误,该功能用于在封闭语句(通常是 SELECT)内部声明为 CTE 的 update/insert/delete,其中 oninsert 和 onupdate 值不会为嵌入语句调用。

    参考链接: #3745

  • [sql] [bug]

    修复了新的 CTE 功能中的一个错误,该功能用于 update/insert/delete,其中围绕语句的匿名(例如,未传递名称)CTE 构造会失败。

    参考链接: #3744

postgresql

  • [postgresql] [bug]

    修复了一个错误,即 PostgreSQL 方言对 TypeDecoratorVariant 类型的深度检查不够,无法确定是否需要渲染 SMALLSERIAL 或 BIGSERIAL 而不是 SERIAL。

    此更改也被向后移植到: 1.0.14

    参考链接: #3739

oracle

  • [oracle] [bug]

    修复了 Select.with_for_update.of 中的一个错误,其中 Oracle 的 “rownum” 方法来处理 LIMIT/OFFSET 将无法容纳 “OF” 子句内的表达式,这些表达式必须在最顶层声明,引用子查询内的表达式。 如果需要,表达式现在会添加到子查询中。

    此更改也被向后移植到: 1.0.14

    参考链接: #3741

misc

  • [feature] [ext]

    为新的 sqlalchemy.ext.indexable 扩展添加了 “default” 参数。

  • [bug] [ext]

    修复了 sqlalchemy.ext.baked 中的一个错误,其中由于变量作用域问题,当涉及多个子查询加载器时,子查询预加载器查询的反烘焙会失败。 由 Mark Hahnenberg 友情提供 Pull request。

    此更改也被向后移植到: 1.0.15

    参考链接: #3743

  • [bug] [ext]

    当作为 AttributeError 引发时,sqlalchemy.ext.indexable 将拦截 IndexError 以及 KeyError。

1.1.0b2

发布日期:2016 年 7 月 1 日

sql

  • [sql] [bug]

    修复了 SQL 数学求反运算符中的问题,其中表达式的类型不再是原始类型的数值类型。 这会导致类型确定结果集行为的问题。

    此更改也被向后移植到: 1.0.14

    参考链接: #3735

  • [sql] [bug]

    修复了 __getstate__ / __setstate__ 方法由于 1.0 系列过渡到 __slots__ 而无法用于 sqlalchemy.util.Properties 的错误。 此问题可能会影响某些第三方应用程序。 由 Pieter Mulder 友情提供 Pull request。

    此更改也被向后移植到: 1.0.14

    参考链接: #3728

  • [sql] [bug]

    对于仅具有整数类型的后端,Boolean 数据类型执行的处理在纯 Python 和 C 扩展版本之间已保持一致,因为 C 扩展版本将接受数据库中的任何整数值作为布尔值,而不仅仅是零和一;此外,发送到数据库的非布尔整数值将被强制转换为精确的零或一,而不是作为原始整数值传递。

    参考链接: #3730

  • [sql] [bug]

    Enum 中稍微回滚了验证规则,以允许未知字符串值通过,除非将标志 validate_string=True 传递给 Enum;任何其他类型的对象当然仍然会被拒绝。 虽然直接用途是允许使用 LIKE 与枚举进行比较,但此用途的存在表明可能存在比我们预期的更多的未知字符串比较用例,这暗示可能也存在一些未知的字符串 INSERT 用例。

    参考链接: #3725

postgresql

  • [postgresql] [bug] [ext]

    sqlalchemy.ext.compiler 扩展中进行了一个轻微的行为更改,由此,如果现有构造本身没有其自己的专用 __visit_name__,则会删除已建立构造的现有编译方案。 这在 1.0 中很少发生,但在 1.1 中 ARRAY 子类 ARRAY 具有此行为。 因此,为另一个方言(如 SQLite)设置编译处理程序将导致主 ARRAY 对象不再可编译。

    参考链接: #3732

mysql

1.1.0b1

发布日期:2016 年 6 月 16 日

orm

engine

  • [engine] [功能]

    添加了连接池事件 ConnectionEvents.close()ConnectionEvents.detach()ConnectionEvents.close_detached()

  • [engine] [功能]

    现在,所有绑定参数集和结果行的字符串格式化,用于日志记录、异常和 repr() 目的,都会截断每个集合中非常大的标量值,包括 “N 个字符被截断” 的注释,类似于大型多参数集的显示本身被截断的方式。

    参考:#2837

  • [engine] [功能]

    添加了 Table 对象的多租户模式转换。这支持应用程序在多个模式中使用同一组 Table 对象(例如每个用户一个模式)的用例。添加了一个新的执行选项 Connection.execution_options.schema_translate_map

    参考:#2685

  • [engine] [功能]

    为 engine 添加了一个新的入口点系统,允许在 URL 的查询字符串中声明 “插件”。可以编写自定义插件,这些插件将有机会预先更改和/或使用 engine 的 URL 和关键字参数,然后在 engine 创建时,将获得 engine 本身,以允许额外的修改或事件注册。插件编写为 CreateEnginePlugin 的子类;有关详细信息,请参阅该类。

    参考:#3536

sql

schema

  • [schema] [enhancement]

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

postgresql

mysql

sqlite

  • [sqlite] [feature]

    SQLite 方言现在反映外键约束中的 ON UPDATE 和 ON DELETE 短语。拉取请求由 Michal Petrucha 提供。

  • [sqlite] [feature]

    SQLite 方言现在反映主键约束的名称。拉取请求由 Diana Clarke 提供。

    参考: #3629

  • [sqlite] [change]

    为 SQLite 方言添加了对 Inspector.get_schema_names() 方法的支持,以与 SQLite 一起使用;拉取请求由 Brian Van Klaveren 提供。还修复了对使用 schema 创建索引以及在 schema 绑定表中反射外键约束的支持。

  • [sqlite] [bug]

    当检测到 SQLite 版本 3.7.16 或更高版本时,取消了 SQLite 上右嵌套连接的解决方法,其中右嵌套连接被重写为子查询,以便解决 SQLite 缺少对此语法的支持的问题。

    参考: #3634

  • [sqlite] [bug]

    当检测到 SQLite 版本 3.10.0 或更高版本时,禁用了 SQLite 意外地将列名作为 tablename.columnname 传递的解决方法。

    参考: #3633

mssql

  • [mssql] [feature]

    UniqueConstraintPrimaryKeyConstraintIndex 上可用的 mssql_clustered 标志现在默认为 None,并且可以设置为 False,这将为主键呈现 NONCLUSTERED 关键字,从而允许将不同的索引用作 “clustered”。拉取请求由 Saulius Žemaitaitis 提供。

  • [mssql] [feature]

    通过 create_engine.isolation_levelConnection.execution_options.isolation_level 参数,为 SQL Server 方言添加了基本隔离级别支持。

    参考: #3534

  • [mssql] [change]

    作为 #3424 的一部分,在 1.0.5 版本中引入的 legacy_schema_aliasing 标志,用于允许禁用 MSSQL 方言尝试为 schema 限定的表创建别名,现在默认为 False;除非显式启用,否则旧的行为现在被禁用。

    参考: #3434

  • [mssql] [bug]

    调整了 mxODBC 方言,以便在与 VARBINARY 数据类型结合使用时,适当地使用 BinaryNull 符号。拉取请求由 Sheila Allen 提供。

  • [mssql] [bug]

    修复了 SQL Server 方言在反映具有无界长度的字符串或其他可变长度列类型时,通过将标记 "max" 分配给字符串的长度属性的问题。虽然 SQL Server 方言支持显式使用 "max" 标记,但它不是基本字符串类型的正常约定的一部分,而是应该将长度保留为 None。现在,方言在反射类型时将长度分配为 None,以便该类型在其他上下文中表现正常。

    参考: #3504

misc

  • [feature] [ext]

    Mutation Tracking 扩展添加了 MutableSetMutableList 辅助类。拉取请求由 Jeong YunWon 提供。

    参考: #3297

  • [bug] [ext]

    混合属性或方法上指定的文档字符串现在在类级别上被接受,允许它与 Sphinx autodoc 等工具一起使用。此处的机制必然涉及对混合属性发生的表达式进行一些包装,这可能会导致它们在使用内省时看起来有所不同。

    参考: #3653

  • [bug] [sybase]

    不受支持的 Sybase 方言现在在尝试编译包含 “offset” 的查询时引发 NotImplementedError;Sybase 没有直接的 “offset” 功能。

    参考: #2278