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

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

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


1.0.15

发布日期:2016 年 9 月 1 日

orm

  • [orm] [bug]
    修复了子查询急加载中的错误,其中“of_type()”对象的子查询加载链接到第二个普通映射类的子查询加载,或者多个“of_type()”属性的较长链将无法正确链接连接。
    参考:#3773#3774

SQL

  • [SQL] [bug]
    修复了Table中的错误,其中内部方法_reset_exported()会破坏对象的状态。该方法旨在用于可选择的对象,并在某些情况下被 ORM 调用;错误的映射配置可能导致 ORM 在Table对象上调用此方法。
    参考:#3755

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。
    参考:#3787

杂项

  • [bug] [ext]
    修复了sqlalchemy.ext.baked中的错误,其中由于变量作用域问题,解除子查询急加载器查询时会失败,涉及多个子查询加载器。感谢 Mark Hahnenberg 的拉取请求。
    参考:#3743

ORM

  • [ORM] [bug]
    修复了子查询急加载中的错误,其中“of_type()”对象的子查询加载链接到第二个普通映射类的子查询加载,或者多个“of_type()”属性的较长链将无法正确链接连接。
    参考:#3773#3774

SQL

  • [SQL] [bug]
    修复了Table中的错误,其中内部方法_reset_exported()会破坏对象的状态。该方法旨在用于可选择的对象,并在某些情况下被 ORM 调用;错误的映射配置可能导致 ORM 在Table对象上调用此方法。
    参考:#3755

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。
    参考:#3787

杂项

  • [bug] [ext]
    修复了sqlalchemy.ext.baked中的 bug,其中由于变量作用域问题,在涉及多个子查询加载程序时,解除子查询加载程序查询会失败。感谢 Mark Hahnenberg 的拉取请求。
    参考:#3743

1.0.14

发布日期:2016 年 7 月 6 日

示例

  • [examples] [bug]
    修复了在 examples/vertical/dictlike-polymorphic.py 示例中发生的回归,导致无法运行的问题。
    参考:#3704

引擎

  • [engine] [bug] [postgresql]
    修复了与MetaData.schema参数一起在跨模式外键反射中的 bug,在这种情况下,存在于“default”模式中的引用表将失败,因为没有办法指示一个具有“空白”模式的Table。特殊符号sqlalchemy.schema.BLANK_SCHEMA已添加为Table.schemaSequence.schema的可用值,表示应强制模式名称为None,即使指定了MetaData.schema
    参考:#3716

sql

  • [sql] [bug]
    修复了 SQL 数学否定运算符中的问题,其中表达式的类型将不再是原始类型的数值类型。这将导致确定结果集行为的问题。
    参考:#3735
  • [sql] [bug]
    修复了在 1.0 系列过渡到__slots__时,导致 sqlalchemy.util.Properties 的__getstate__ / __setstate__方法无法正常工作的 bug。该问题可能会影响一些第三方应用程序。感谢 Pieter Mulder 的拉取请求。
    参考:#3728
  • [sql] [bug]
    FromClause.count()将在 1.1 中被弃用。此函数使用表中的任意列,并不可靠;对于核心使用,应优先使用func.count()
    参考:#3724
  • [sql] [bug]
    修复了CTE结构中的 bug,当使用联合时会导致它无法正确克隆,这在递归 CTE 中很常见。不正确的克隆会在各种 ORM 上下文中使用 CTE 时引发错误,例如column_property()的上下文。
    参考:#3722
  • [sql] [bug]
    修复了Table.tometadata()会为每个具有unique=True参数的Column对象创建重复的UniqueConstraint的错误。
    参考:#3721

postgresql

  • [postgresql] [bug]
    修复了TypeDecoratorVariant类型未被 PostgreSQL 方言深度检查以确定是否需要呈现 SMALLSERIAL 或 BIGSERIAL 而不是 SERIAL 的错误。
    参考:#3739

oracle

  • [oracle] [bug]
    修复了Select.with_for_update.of中的错误,其中 Oracle 的“rownum”方法在处理 LIMIT/OFFSET 时未能考虑“OF”子句内的表达式,这些表达式必须在引用子查询内的表达式的最高级别陈述。如果需要,这些表达式现在将添加到子查询中。
    参考:#3741

示例

  • [examples] [bug]
    修复了在示例/vertical/dictlike-polymorphic.py 示例中发生的回归,导致无法运行的问题。
    参考:#3704

引擎

  • [engine] [bug] [postgresql]
    修复了跨模式外键反射中的错误,与MetaData.schema参数一起使用时,引用的表存在于“default”模式中,将会失败,因为没有办法指示一个具有“空白”模式的Table。特殊符号sqlalchemy.schema.BLANK_SCHEMA已添加为Table.schemaSequence.schema的可用值,指示模式名称应强制为None,即使指定了MetaData.schema
    参考:#3716

sql

  • [sql] [bug]
    修复了 SQL 数学否定运算符中的问题,其中表达式的类型将不再是原始表达式的数值类型。这会导致确定结果集行为的类型问题。
    参考:#3735
  • [sql] [bug]
    修复了由于 1.0 系列向__slots__过渡而导致的 sqlalchemy.util.Properties 的__getstate__ / __setstate__方法不起作用的 bug。该问题可能影响某些第三方应用程序。感谢 Pieter Mulder 的拉取请求。
    参考:#3728
  • [sql] [bug]
    FromClause.count()在 1.1 版本中将被弃用。该函数使用表中的任意列,不可靠;对于核心使用,应优先使用func.count()
    参考:#3724
  • [sql] [bug]
    修复了在使用联合时CTE结构未能正确克隆的 bug,这在递归 CTE 中很常见。不正确的克隆会导致在各种 ORM 上下文中使用 CTE 时出错,例如column_property()
    参考:#3722
  • [sql] [bug]
    修复了Table.tometadata()会为每个具有unique=True参数的Column对象创建重复的UniqueConstraint的 bug。
    参考:#3721

postgresql

  • [postgresql] [bug]
    修复了一个 bug,即 PostgreSQL 方言未能深入检查TypeDecoratorVariant类型,以确定是否应该渲染 SMALLSERIAL 或 BIGSERIAL 而不是 SERIAL。
    参考:#3739

oracle

  • [oracle] [bug]
    修复了Select.with_for_update.of中的 bug,在这里 Oracle 的“rownum”方法对 LIMIT/OFFSET 无法适应“OF”子句内的表达式,这些表达式必须在最顶层引用子查询内的表达式。如果需要,这些表达式现在将添加到子查询中。
    参考:#3741

1.0.13

发布日期:2016 年 5 月 16 日

orm

  • [orm] [bug]
    修复了Query.update()Query.delete()中“evaluate”策略中的一个 bug,即无法适应具有“可调用”值的绑定参数,这种情况发生在沿着关系进行多对一相等表达式过滤时。
    参考:#3700
  • [ORM] [错误]
    修复了一个 bug,即在使用深层类继承层次结构与多个映射器配置步骤同时使用时,用于反向引用的事件侦听器可能会被错误地应用多次。
    参考:#3710
  • [ORM] [错误]
    修复了一个 bug,即将text()构造传递给Query.group_by()方法会引发错误,而不是将对象解释为 SQL 片段。
    参考:#3706
  • [ORM] [错误]
    匿名标记应用于传递给column_property()func构造,因此如果同一属性被引用两次作为列表达式,则名称将被去重,从而避免“模糊列”错误。以前,需要应用.label(None)以便取消匿名化名称。
    参考:#3663
  • [ORM] [错误]
    修复了 1.0 系列中 ORM 加载中出现的回归问题,即对于缺少的预期列引发的异常错误会错误地是NoneType错误,而不是预期的NoSuchColumnError
    参考:#3658

示例

  • [示例] [错误]
    将“有向图”示例更改为不再将节点的整数标识符视为重要;“更高”/“更低”引用现在允许在两个方向上存在相互边。
    参考:#3698

SQL

  • [SQL] [错误]
    修复了一个 bug,即在与Engine一起使用case_sensitive=False时,结果集将无法正确适应结果集中的重复列名,导致在 1.0 中执行语句时出错,并阻止 1.1 中“模糊列”异常的功能。
    参考:#3690
  • [SQL] [错误]
    修复了一个 bug,即对于一个 EXISTS 表达式的否定在结果中未正确类型化为布尔值,并且在 SELECT 列表中也未能匿名别名化,就像对于一个非否定的 EXISTS 结构一样。
    参考:#3682
  • [sql] [bug]
    修复了一个 bug,即在调用Insert.values()时,如果传入的是参数映射列表而不是单个参数映射,则“未消耗的列名”异常不会被触发。感谢 Athena Yao 的拉取请求。
    参考:#3666

postgresql

  • [postgresql] [bug]
    为错误字符串“SSL error: decryption failed or bad record mac”添加了断开检测支持。感谢 Iuri de Silvio 的拉取请求。
    参考:#3715

mssql

  • [mssql] [bug]
    修复了在 SQL Server 中应用于 OFFSET 选择的 ROW_NUMBER OVER 子句会不当地用本地语句中与语句的 ORDER BY 条件中使用的标签名称重叠的普通列替换的 bug。
    参考:#3711
  • [mssql] [bug] [oracle]
    修复了  1.0 系列中出现的回归问题,该问题会导致 Oracle 和 SQL Server 方言在这些方言将 SELECT 包装在子查询中以提供  LIMIT/OFFSET 行为时,不正确地计算结果集列,原始 SELECT 语句多次引用相同列时,例如一个列和该列的标签。这个问题与#3658有关,当错误发生时,它还会导致NoneType错误,而不是报告无法定位列。
    参考:#3657

oracle

  • [oracle] [bug]
    修复了 cx_Oracle  连接过程中的一个 bug,当用户、密码或 dsn 为空时会导致 TypeError。这阻止了对 Oracle  数据库的外部身份验证,并阻止了连接到默认 dsn。现在,oracle://连接字符串使用操作系统用户名登录到默认 dsn,相当于使用  sqlplus 连接时使用‘/’。
    参考:#3705
  • [oracle] [bug]
    修复了主要由 Oracle 使用的结果代理中的一个 bug,当二进制和其他 LOB 类型参与时,当使用查询/语句缓存时,类型级别的结果处理器,特别是二进制类型本身所需的处理器以及任何其他处理器,在第一次运行语句后会丢失,因为它从缓存的结果元数据中被移除。
    参考:#3699

杂项

  • [bug] [py3k]
    修复了“to_list”转换中的 bug,其中单个字节对象将被转换为单个字符列表。这将影响使用主键为字节对象的Query.get()方法等其他事项。
    参考:#3660

orm

  • [orm] [bug]
    修复了在Query.update()Query.delete()的“evaluate”策略中的 bug,该 bug 无法适应具有“callable”值的绑定参数,当通过关系沿着多对一等式表达式进行过滤时会发生这种情况。
    参考:#3700
  • [orm] [bug]
    修复了一个 bug,当在深层类继承层次结构中与多个映射器配置步骤一起使用时,用于反向引用的事件侦听器可能会被错误地应用多次。
    参考:#3710
  • [orm] [bug]
    修复了一个 bug,通过将text()构造传递给Query.group_by()方法会引发错误,而不是将对象解释为 SQL 片段。
    参考:#3706
  • [orm] [bug]
    匿名标记应用于传递给column_property()func构造,因此如果同一属性被引用两次作为列表达式,则名称将被去重,从而避免“模糊列”错误。以前,需要应用.label(None)以便取消匿名化名称。
    参考:#3663
  • [orm] [bug]
    修复了在 ORM 加载中出现的 1.0 系列中的回归,其中对于缺少的预期列引发的异常将错误地是一个NoneType错误,而不是预期的NoSuchColumnError
    参考:#3658

例子

  • [例子] [bug]
    将“有向图”示例更改为不再将节点的整数标识符视为重要;“更高”/“更低”引用现在允许双向的相互边。
    参考:#3698

sql

  • [sql] [bug]
    修复了当使用 case_sensitive=FalseEngine 时,结果集未能正确适应结果集中的重复列名,导致在 1.0 中执行语句时出错,并阻止了在 1.1 中“模糊列”异常的发生。
    引用:#3690
  • [sql] [bug]
    修复了对 EXISTS 表达式的否定不会正确地被类型化为布尔值,并且在 SELECT 列表中也不会被匿名别名化的 bug,与非否定的 EXISTS 构造一样。
    引用:#3682
  • [sql] [bug]
    修复了在 Insert.values() 被调用时,当传递了参数映射的列表而不是单个参数映射时,“未使用的列名”异常未能被触发的 bug。感谢 Athena Yao 提交的 Pull 请求。
    引用:#3666

postgresql

  • [postgresql] [bug]
    添加了对错误字符串 “SSL error: decryption failed or bad record mac” 的断开检测支持。感谢 Iuri de Silvio 提交的 Pull 请求。
    引用:#3715

mssql

  • [mssql] [bug]
    修复了在 SQL Server 中对于 OFFSET 查询应用的 ROW_NUMBER OVER 子句会不正确地替换语句中与语句的 ORDER BY 条件重叠的纯列的 bug。
    引用:#3711
  • [mssql] [bug] [oracle]
    修复了在  1.0 系列中出现的回归,该回归会导致 Oracle 和 SQL Server 方言在将 SELECT 包装在子查询中以提供  LIMIT/OFFSET 行为时,当原始 SELECT 语句多次引用同一列时(例如列和该列的标签)时,不正确地计算结果集列。此问题与 #3658 相关,因为当错误发生时,它也会导致 NoneType 错误,而不是报告无法定位列。
    引用:#3657

oracle

  • [oracle] [bug]
    修复了 cx_Oracle  连接过程中出现的 bug,当用户、密码或 dsn 中有任一为空时会导致 TypeError。这阻止了对 Oracle  数据库的外部认证,并阻止了连接到默认 dsn。现在 connect 字符串 oracle:// 将使用操作系统用户名登录到默认  dsn,相当于使用 sqlplus 进行连接时使用 ‘/’。
    引用:#3705
  • [oracle] [bug]
    修复了主要由 Oracle 使用的结果代理中的一个错误,当涉及二进制和其他 LOB 类型时,当使用查询/语句缓存时,类型级别的结果处理器,特别是二进制类型本身所需的处理器以及任何其他处理器,在第一次运行语句后会丢失,因为它从缓存的结果元数据中被移除。
    引用:#3699

杂项

  • [bug] [py3k]
    修复了“to_list”转换中的错误,其中单个字节对象将被转换为单个字符列表。这将影响使用Query.get()方法获取主键为字节对象的对象等其他情况。
    引用:#3660

1.0.12

发布日期:2016 年 2 月 15 日

orm

  • [orm] [bug]
    修复了Session.merge()中的错误,其中具有复合主键的对象具有某些但不是所有 PK 字段的值会发出 SELECT 语句,将内部 NEVER_SET 符号泄漏到查询中,而不是检测到此对象没有可搜索的主键并且不应发出 SELECT。
    引用:#3647
  • [orm] [bug]
    自 0.9 版本以来的固定回归,0.9 风格的加载器选项系统未能适应单个查询中多个undefer_group()加载器选项。现在将考虑多个undefer_group()选项,即使针对同一实体也是如此。
    引用:#3623

引擎

  • [engine] [bug] [mysql]
    重新审视#2696,首次发布于  1.0.10,试图通过发出警告来解决 Python 2  缺乏异常上下文报告的问题,该警告是由于尝试回滚已失败的事务时被第二个异常中断而引发的;在 MySQL  后端与意外丢失的保存点一起发生时,此问题仍会发生,然后在尝试回滚时会导致“没有这样的保存点”错误,遮蔽了原始条件是什么。
    此方法已泛化为 Core 中的“安全重新引发”函数,该函数在 ORM 和 Core 中发生,任何处于尝试提交时出现错误而回滚事务的地方,包括 SessionConnection 提供的上下文管理器,并在诸如“RELEASE SAVEPOINT”失败等操作中进行。之前,此修复仅针对 ORM flush/commit 过程中的特定路径;现在也针对所有事务上下文管理器执行。
    参考:#2696

sql

  • [sql] [bug]
    修复了在将 insert()update()delete() 构造编译为字符串 SQL 时未传播“literal_binds”标志的问题。感谢 Tim Tate 提供的拉取请求。
    参考:#3643
  • [sql] [bug]
    修复了无意中使用 Python 的 __contains__ 覆盖与列表达式(例如使用 'x' in col)会导致 ARRAY 类型无限循环的问题,因为 Python 将此推迟到永不为此类型引发异常的 __getitem__ 访问。总的来说,现在所有对 __contains__ 的使用都会引发 NotImplementedError。
    参考:#3642
  • [sql] [bug]
    修复了在 0.9 系列左右出现的 Table 元数据构造中的错误,其中向反序列化的 Table 添加列时会无法正确建立 Column 在‘c’集合中,导致在诸如 ORM 配置等领域出现问题。这可能影响 extend_existing 等用例。
    参考:#3632

postgresql

  • [postgresql] [bug]
    修复了在 text() 构造中的错误,其中双冒号表达式未正确转义,例如 some\:\:expr,这在呈现 PostgreSQL 样式的 CAST 表达式时最常需要。
    参考:#3644

mssql

  • [mssql] [bug]
    修复了在对 MSSQL 上的日期时间值使用 extract() 函数时的语法问题;关键字周围的引号已被移除。感谢 Guillaume Doumenc 提供的拉取请求。
    参考:#3624
  • [mssql] [bug] [firebird]
    修复了 1.0 版中的一个回归,其中通过纯文本或通过 text() 构造发出的 UPDATE 或 DELETE 语句的即时提取不再调用 cursor.rowcount,影响那些一旦关闭游标就擦除 cursor.rowcount 的驱动程序,例如 SQL Server ODBC 和 Firebird 驱动程序。
    参考:#3622

oracle

  • [oracle] [bug] [jython]
    修复了 Jython Oracle 编译器中的一个小问题,涉及到 “RETURNING” 的渲染,该问题允许当前不受支持/未经测试的方言与 1.0 系列基本工作。感谢 Carlos Rivas 提供的拉取请求。
    参考:#3621

杂项

  • [bug] [py3k]
    修复了一些异常重新引发场景会将异常附加到自身作为“原因”的错误;虽然 Python 3 解释器可以接受这样做,但它可能会在 iPython 中导致无限循环。
    参考:#3625

orm

  • [orm] [bug]
    修复了 Session.merge() 中的一个错误,在此错误中,具有复合主键的对象对于一些但不是所有 PK 字段的值会发出一个 SELECT 语句,泄露内部的 NEVER_SET 符号到查询中,而不是检测到此对象没有可搜索的主键,并且不应发出任何 SELECT。
    参考:#3647
  • [orm] [bug]
    修复了自 0.9 版以来的一个回归,其中 0.9 风格的加载器选项系统未能适应单个查询中的多个 undefer_group() 加载器选项。现在将考虑多个 undefer_group() 选项,即使针对相同的实体也是如此。
    参考:#3623

engine

  • [engine] [bug] [mysql]
    重新访问 #2696,首次发布于  1.0.10 版本中,该版本尝试通过发出警告来解决 Python 2  缺乏异常上下文报告的问题,该异常被第二个异常中断时尝试回滚已经失败的事务;这个问题继续出现在 MySQL  后端与意外丢失的保存点一起使用时,然后当尝试回滚时会导致“没有这样的保存点”错误,遮蔽了原始条件是什么。
    该方法已被泛化为 Core 中的“安全重新引发”函数,该函数在 ORM 和 Core 中的任何事务因尝试提交时发生错误而被回滚时发生,包括SessionConnection提供的上下文管理器,并在诸如“RELEASE SAVEPOINT”失败等操作中发生。以前,修复仅适用于 ORM 刷新/提交过程中的特定路径;现在它也适用于所有事务上下文管理器。
    参考:#2696

sql

  • [sql] [bug]
    修复了在将insert()update()delete()构造编译为字符串 SQL 时,“literal_binds”标志未传播的问题。感谢 Tim Tate 的拉取请求。
    参考:#3643
  • [sql] [bug]
    修复了在意外使用 Python __contains__ 覆盖与列表达式(例如通过使用 'x' in col)会导致 ARRAY 类型无限循环的问题,因为 Python 将此延迟到__getitem__访问,而此类型永远不会引发。总体而言,现在所有对__contains__的使用都会引发 NotImplementedError。
    参考:#3642
  • [sql] [bug]
    修复了在 0.9 系列左右出现的Table元数据构造中的错误,向Table添加列时,反序列化的Table未能正确建立‘c’集合中的Column,导致 ORM 配置等领域出现问题。这可能会影响extend_existing等用例。
    参考:#3632

postgresql

  • [postgresql] [bug]
    修复了text()构造中的错误,双冒号表达式无法正确转义,例如some\:\:expr,这在渲染 PostgreSQL 风格的 CAST 表达式时最常见。
    参考:#3644

mssql

  • [mssql] [bug]
    修复了在 MSSQL 上针对日期时间值使用extract()函数的语法;关键字周围的引号被移除。感谢 Guillaume Doumenc 的拉取请求。
    参考:#3624
  • [mssql] [bug] [firebird]
    修复了 1.0 版本中的一个回归问题,即对于通过纯文本或通过text()构造发出的 UPDATE 或 DELETE 语句,不再调用 cursor.rowcount 的急切获取,影响那些在关闭游标后擦除 cursor.rowcount 的驱动程序,如 SQL Server ODBC 和 Firebird 驱动程序。
    参考:#3622

oracle

  • [oracle] [bug] [jython]
    修复了 Jython Oracle 编译器中的一个小问题,涉及“RETURNING”的呈现,这使得当前不受支持/未经测试的方言可以在 1.0 系列中基本工作。感谢 Carlos Rivas 的拉取请求。
    参考:#3621

杂项

  • [bug] [py3k]
    修复了一些异常重新引发场景会将异常附加到自身作为“原因”的 bug;虽然 Python 3 解释器可以接受这种情况,但在 iPython 中可能会导致无限循环。
    参考:#3625

1.0.11

发布日期:2015 年 12 月 22 日

orm

  • [orm] [bug]
    由于对 #3593 的修复导致 1.0.10 中引入的回归 bug,对于从 poly_subclass->class->poly_baseclass  连接到 polymorphic joinedload 的检查会在 class->poly_subclass->class  的情况下失败。
    参考:#3611
  • [orm] [bug]
    修复了Session.bulk_update_mappings()及相关功能在使用时未增加版本 id 计数器的 bug。这里的体验仍然有些粗糙,因为给定字典中需要原始版本 id,并且目前还没有清晰的错误报告。
    参考:#3610
  • [orm] [bug]
    Mapper.eager_defaults标志进行了重大修复,该标志在多个 UPDATE 语句需要被发出时没有被正确地遵守,无论是作为 flush 的一部分还是作为批量更新操作。此外,在更新语句中不必要地发出了 RETURNING。
    参考:#3609
  • [orm] [bug]
    修复了使用Query.select_from()方法会导致后续调用Query.with_parent()方法失败的 bug。
    参考:#3606

sql

  • [sql] [bug]
    修复了Update.return_defaults()中的错误,该错误会导致所有未包含在 SET 子句中(例如主键列)的插入默认保持列被渲染到 RETURNING 中,尽管这是一个 UPDATE 操作。
    引用:#3609

mysql

  • [mysql] [bug]
    调整了用于解析 MySQL 视图的正则表达式,不再假定反射视图源中存在“ALGORITHM”关键字,因为一些用户报告在某些 Amazon RDS 环境中不存在该关键字。
    引用:#3613
  • [mysql] [bug]
    向 MySQL 5.7 的 MySQL 方言添加了新的保留字,包括‘generated’、‘optimizer_costs’、‘stored’、‘virtual’。感谢 Hanno Schlichting 的拉取请求。

杂项

  • [bug] [ext]
    进一步修复了#3605,在MutableDict上的 pop 方法,其中“default”参数未包含。
    引用:#3605
  • [bug] [ext]
    修复了烘焙加载器系统中的错误,该系统的全局猴子补丁用于设置烘焙懒加载器,会干扰依赖延迟加载作为后备的其他加载器策略,例如连接和子查询急加载器,在映射器配置时导致IndexError异常。
    引用:#3612

orm

  • [orm] [bug]
    修复了 1.0.10 中由于#3593修复引起的回归,其中为 poly_subclass->class->poly_baseclass 连接添加了多态 joinedload 的检查会导致在 class->poly_subclass->class 的情况下失败。
    引用:#3611
  • [orm] [bug]
    修复了Session.bulk_update_mappings()等在使用时不会增加版本 id 计数器的错误。这里的体验仍然有点粗糙,因为给定字典中仍需要原始版本 id,并且尚无干净的错误报告。
    引用:#3610
  • [orm] [bug]
    Mapper.eager_defaults标志进行了重大修复,该标志在需要发出多个 UPDATE 语句时(作为刷新或批量更新操作的一部分)不会被正确执行。此外,在更新语句中不必要地发出 RETURNING。
    引用:#3609
  • [orm] [bug]
    修复了使用 Query.select_from() 方法会导致随后调用 Query.with_parent() 方法失败的 bug。
    参考:#3606

sql

  • [sql] [bug]
    修复了 Update.return_defaults() 中的错误,该错误会导致所有插入默认列(否则不包含在 SET 子句中的列,例如主键列)被渲染到 RETURNING 中,尽管这是一个 UPDATE。
    参考:#3609

mysql

  • [mysql] [bug]
    调整了用于解析 MySQL 视图的正则表达式,以便我们不再假设反映视图源中存在 “ALGORITHM” 关键字,因为一些用户报告称在某些 Amazon RDS 环境中未出现。
    参考:#3613
  • [mysql] [bug]
    将新的保留字添加到 MySQL 5.7 的 MySQL 方言中,包括 ‘generated’、‘optimizer_costs’、‘stored’、‘virtual’。Pull request 由 Hanno Schlichting 提供。

misc

  • [bug] [ext]
    #3605 进行了进一步修复,即对 MutableDict 的 pop 方法,在其中没有包含 “default” 参数。
    参考:#3605
  • [bug] [ext]
    修复了烘焙加载器系统中的错误,该系统的系统范围 monkeypatch 用于设置烘焙延迟加载器会干扰依赖惰性加载作为后备的其他加载器策略,例如 joined 和子查询急切加载器,导致在映射器配置时出现 IndexError 异常。
    参考:#3612

1.0.10

发布日期:2015 年 12 月 11 日

orm

  • [orm] [bug]
    修复了一个问题,即在一对多关系的 post_update 中,如果属性设置为 None 而且之前没有加载,则会导致 UPDATE 未发出。
    参考:#3599
  • [orm] [bug]
    修复了一个 bug,实际上是在版本 0.8.0 和 0.8.1 之间发生的回归,由 #2714 引起。当同时使用“with_polymorphic”时,需要通过子类绑定关系进行连接的连接急切加载会无法从正确的实体进行连接。
    参考:#3593
  • [orm] [bug]
    修复了在以下情况下会发生的  joinedload 错误:a. 查询包含强制子查询的 limit/offset 条件 b. 关系使用“secondary” c. 关系的  primaryjoin 引用的列既不是主键的一部分,也不是主键列在不同属性名称下的联合继承子类表中 d.  查询推迟了主要连接中存在的列,通常通过不包含在 load_only()中; 必要的列不会出现在子查询中,并产生无效的 SQL。
    参考:#3592
  • [orm] [bug]
    Session.rollback()在引发异常的Session.flush()操作范围内失败时出现的一种罕见情况,这种情况已在某些  MySQL SAVEPOINT 情况下观察到,阻止了在 flush 期间发出的原始数据库异常被观察到,但仅在 Py2K 上,因为 Py2K  不支持异常链接; 在 Py3K  上,原始异常被链接。作为解决方法,在这种特定情况下发出警告,显示至少在继续引发回滚异常之前原始数据库错误的字符串消息。
    参考:#2696

orm 声明

  • [orm] [declarative] [bug]
    修复了在 Py2K 中,unicode 文字不能作为声明中的类或其他参数的字符串名称被接受的错误,该错误发生在使用backref()relationship()上时。感谢 Nils Philippsen 的拉取请求。

sql

  • [sql] [feature]
    在 UPDATE 语句中添加了对参数顺序化 SET 子句的支持。通过将update.preserve_parameter_order标志传递给核心Update构造,或者将其添加到 ORM 级别的Query.update.update_args字典中,同时将参数本身作为 2 元组列表传递。感谢 Gorka Eguileor 的实现和测试。
    参见
    参数顺序化更新
  • [sql] [bug]
    修复了在 Insert.from_select() 结构中的问题,当目标 Table 具有 Python 端默认值时,Select 结构的 ._raw_columns 集合会在编译 Insert 结构时被就地修改。Select 结构在编译后会独立存在,其中包含编译 Insert 后存在的错误列,并且由于重复的绑定参数,Insert 语句本身在第二次编译尝试时会失败。
    参考:#3603
  • [sql] [bug] [postgresql]
    修复了使用 CREATE TABLE 创建一个没有列的表,但具有约束(如 CHECK 约束)的 bug,会在定义中产生一个错误的逗号;这种情况可能发生在具有自己没有列的 PostgreSQL INHERITS 表中。
    参考:#3598

postgresql

  • [postgresql] [bug]
    修复了“FOR UPDATE OF” PostgreSQL 特定的 SELECT 修饰符在所引用的表具有模式限定符时会失败的问题;PG 需要省略模式名称。感谢 Diana Clarke 的拉取请求。
    参考:#3573
  • [postgresql] [bug]
    修复了将一些 SQL 表达式传递给 ExcludeConstraint 的“where”子句时无法正确接受的 bug。感谢 aisch 的拉取请求。
  • [postgresql] [bug]
    修复了 INTERVAL.python_type 属性以与 python_type 相同的方式返回 datetime.timedelta,而不是引发 NotImplementedError
    参考:#3571

mysql

  • [mysql] [bug]
    修复了在 MySQL 反射中的错误,其中 DATETIMETIMESTAMPTIME 类型的“小数部分”会被错误地放置到未使用的 timezone 属性中,而不是 fsp 属性中。
    参考:#3602

mssql

  • [mssql] [错误]
    将 “20006: 向服务器写入失败” 错误添加到 pymssql 驱动程序的断开连接错误列表中,因为观察到这可能导致连接无法使用。
    参考:#3585
  • [mssql] [错误]
    现在,如果 SQL 服务器从 DATE 或 TIME 列返回无效的日期或时间格式,则会引发描述性 ValueError,而不是出现 NoneType 错误。感谢 Ed Avis 提交的拉取请求。
  • [mssql] [错误]
    修复了对 MSSQL 类型 DATETIME2、TIME 和 DATETIMEOFFSET 生成的 DDL 的问题,如果精度为“零”,则不会生成精度字段。感谢 Jacobo de Vera 提交的拉取请求。

测试

  • [测试] [更改]
    ORM 和 Core 教程一直以来都是以 doctest 格式存在的,现在在 Python 2 和 Python 3 中都在正常的单元测试套件中执行。

杂项

  • [错误] [扩展]
    MutableDict 类添加了对 dict.pop()dict.popitem() 方法的支持。
    参考:#3605
  • [错误] [py3k]
    更新了内部的  getargspec() 调用,一些与 py36 相关的装置更新,以及对两个迭代器的更改,以“返回”而不是引发  StopIteration,以允许测试在 Py3.5、Py3.6 上通过而不产生错误或警告,拉取请求由 Jacob MacDonald、Luri  de Silvio 和 Phil Jones 提交。
  • [错误] [扩展]
    修复了烘焙查询中的一个问题,其中 .get() 方法,在直接使用或在延迟加载中使用时,未将映射器的“获取子句”视为缓存键的一部分,导致如果子句重新生成,则绑定参数不匹配。这个子句会被映射器动态缓存,但在高并发场景下,可能在首次访问时生成多次。
    参考:#3597

orm

  • [orm] [错误]
    修复了在多对一关系上的 post_update 失败的问题,在这种情况下,如果属性设置为 None 并且以前未加载,则不会发出 UPDATE。
    参考:#3599
  • [orm] [错误]
    修复了一个实际上是在版本 0.8.0 和 0.8.1 之间发生的回归错误,原因是#2714。当“with_polymorphic”也被使用时,需要跨子类绑定关系进行连接的连接急切加载的情况将无法从正确的实体进行连接。
    参考:#3593
  • [orm] [bug]
    修复了一个  joinedload bug,当 a.查询包含强制子查询的 limit/offset 条件时 b.关系使用“secondary” c.关系的  primaryjoin 引用的列既不是主键的一部分,也不是主键列在一个不同属性名称下的联合继承子类表中 d.查询推迟了在 primaryjoin  中存在的列,通常通过不包括在 load_only()中; 必要的列不会出现在子查询中,并产生无效的 SQL。
    参考:#3592
  • [orm] [bug]
    一个罕见的情况发生在Session.rollback()在引发异常的Session.flush()操作范围内失败时,如在一些  MySQL SAVEPOINT 情况下观察到的,阻止了在 flush 期间发出的原始数据库异常被观察到,但仅在 Py2K 上,因为 Py2K  不支持异常链接; 在 Py3K  上,原始异常被链接。作为一种解决方法,在这种特定情况下发出一个警告,至少显示原始数据库错误的字符串消息,然后我们继续引发  rollback-originating 异常。
    参考:#2696

orm 声明式

  • [orm] [declarative] [bug]
    修复了一个 bug,在 Py2K 中,unicode 文字不会被接受为声明式中使用backref()relationship()中的类或其他参数的字符串名称。感谢 Nils Philippsen 的拉取请求。

sql

  • [sql] [feature]
    增加了对 UPDATE 语句中参数顺序 SET 子句的支持。通过将 update.preserve_parameter_order 标志传递给核心 Update 构造,或者将其添加到 ORM 级别的 Query.update.update_args 字典中,同时将参数本身作为 2 元组列表传递。感谢 Gorka Eguileor 的实现和测试。
    另请参阅
    参数顺序更新
  • [sql] [bug]
    修复了在 Insert.from_select() 构造中存在的问题,其中在编译 Insert 构造时,当目标 Table 具有 Python 端默认值时,Select 构造的 ._raw_columns 集合会被就地修改。在编译 Insert 构造后,Select 构造将独立编译,并且在编译 Insert 构造后,Insert 语句本身将由于重复的绑定参数而在第二次编译尝试时失败。
    参考:#3603
  • [sql] [bug] [postgresql]
    修复了使用不带列的表创建 CREATE TABLE,但具有约束(如 CHECK 约束)会在定义中出现错误逗号的 bug;这种情况可能发生在具有自己没有列的 PostgreSQL INHERITS 表中。
    参考:#3598

postgresql

  • [postgresql] [bug]
    修复了“FOR UPDATE OF” PostgreSQL 特定的 SELECT 修饰符如果所指表具有模式限定符则会失败的问题;PG 需要省略模式名称。感谢 Diana Clarke 提交的拉取请求。
    参考:#3573
  • [postgresql] [bug]
    修复了将某些类型的 SQL 表达式传递给 ExcludeConstraint 的“where”子句时无法正确接受的 bug。感谢 aisch 提交的拉取请求。
  • [postgresql] [bug]
    修复了 INTERVAL.python_type 属性,使其像 python_type 一样返回 datetime.timedelta,而不是引发 NotImplementedError
    参考:#3571

mysql

  • [mysql] [bug]
    修复了 MySQL 反射中的错误,其中DATETIMETIMESTAMPTIME 类型的“小数部分”会错误地放置到未被 MySQL 使用的 timezone 属性中,而不是 fsp 属性中。
    参考:#3602

mssql

  • [mssql] [bug]
    将错误“20006: 无法向服务器写入”添加到了 pymssql 驱动程序的断开连接错误列表中,因为观察到这会使连接无法使用。
    参考:#3585
  • [mssql] [bug]
    如果 SQL 服务器从 DATE 或 TIME 列返回无效的日期或时间格式,现在会引发描述性的 ValueError,而不是以 NoneType 错误失败。感谢 Ed Avis 提供的拉取请求。
  • [mssql] [bug]
    修复了对具有“零”精度的 MSSQL 类型 DATETIME2、TIME 和 DATETIMEOFFSET 生成的 DDL 不会生成精度字段的问题。感谢 Jacobo de Vera 提供的拉取请求。

测试

  • [tests] [change]
    ORM 和 Core 教程一直以 doctest 格式存在,现在在 Python 2 和 Python 3 中都在正常的单元测试套件中进行测试。

杂项

  • [bug] [ext]
    将对 MutableDict 类添加了对 dict.pop()dict.popitem() 方法的支持。
    参考:#3605
  • [bug] [py3k]
    更新了内部的  getargspec() 调用,一些与 py36 相关的 fixture 更新,以及对两个迭代器的更改,使其“返回”而不是引发  StopIteration,以便在 Py3.5、Py3.6 上无错误或警告地通过测试,拉取请求由 Jacob MacDonald、Luri de  Silvio 和 Phil Jones 提供。
  • [bug] [ext]
    修复了在烘焙查询中的问题,其中 .get() 方法(直接使用或在惰性加载中使用)未将映射器的“获取子句”视为缓存键的一部分,导致如果子句重新生成则导致绑定参数不匹配。这个子句在并发场景下会被映射器动态地缓存,但在高度并发的场景下,当首次访问时可能会生成多次。
    参考:#3597

1.0.9

发布日期:2015 年 10 月 20 日

orm

  • [orm] [feature]
    添加了新方法 Query.one_or_none();与 Query.one() 相同,但如果未找到行则返回 None。感谢 esiegerman 提交的拉取请求。
  • [orm] [bug] [postgresql]
    修复了  1.0 版本中的回归问题,即在 ORM 中使用“executemany”进行 UPDATE 语句的新功能(例如 UPDATE 语句现在在  flush 中使用 executemany() 进行批处理)在 PostgreSQL 和其他支持 RETURNING  的后端上会出现问题,因为服务器端值是通过 RETURNING 检索的,而在 executemany 中不支持。
    参考:#3556
  • [orm] [bug]
    修复了在内部日志中对某些类型的内部列加载器选项进行字符串化时可能出现的罕见 TypeError。
    参考:#3539
  • [orm] [bug]
    修复了 Session.bulk_save_objects() 中的错误,其中具有某种“更新时获取”值的映射列,且在给定对象中不存在时,会导致操作中出现 AttributeError。
    参考:#3525
  • [orm] [bug]
    修复了 1.0 版本中“noload”加载策略在对多对一关系无法正常工作的回归问题。加载器使用了一个 API 将“None”放入字典中,但实际上不再写入值;这是 #3061 的一个副作用。
    参考:#3510

示例

  • [examples] [bug]
    修复了“history_meta”示例中的两个问题,其中历史跟踪可能遇到空历史,并且键入替代属性名称的列无法正确跟踪的问题。修复由 Alex Fraser 提供。

sql

  • [sql] [bug]
    修复了 1.0 版本中发布的多值插入语句的默认处理器回归问题,#3288,在使用默认时默认列类型不会传播到编译后的语句中,导致绑定级别类型处理程序不会被调用。
    参考:#3520

postgresql

  • [postgresql] [bug]
    对 1.0.6 中发布的反映存储选项和 USING 的新 PostgreSQL 功能的调整,禁用了 PostgreSQL 版本 < 8.2 的功能,其中未提供 reloptions 列;这使得基于 8.0.x 版本的 PostgreSQL 的 Amazon Redshift 再次可以正常工作。修复由 Pete Hollobon 提供。

oracle

  • [oracle] [bug] [py3k]
    修复了 cx_Oracle 版本 5.2 的支持,该版本在 Python 3 下触发了 SQLAlchemy 的版本检测,并无意中未使用正确的 Unicode 模式。这会导致问题,例如绑定变量被误解释为 NULL,以及行被静默地未返回。
    此更改也已回溯至:0.7.0b1
    参考:#3491
  • [oracle] [bug]
    修复了 Oracle 方言中的一个 bug,即反射带有引号强制转换为全小写的表和其他符号的情况在反射查询中无法正确识别。现在,quoted_name 构造已应用于检测在“名称规范化”过程中被强制转换为全小写的传入符号名称。
    参考:#3548

misc

  • [功能] [扩展]
    AssociationProxy 构造函数添加了 AssociationProxy.info 参数,以适应在 #2971 中添加的 AssociationProxy.info 访问器。这是可能的,因为 AssociationProxy 是显式构造的,不像通过装饰器语法隐式构造的混合体。
    参考:#3551
  • [bug] [sybase]
    修复了关于  Sybase 反射的两个问题,允许没有主键的表被反射,同时确保涉及外键检测的 SQL  语句被预先获取,以避免嵌套查询时出现驱动程序问题。此处的修复由 Eugene Zapolsky 提供;请注意,我们目前无法测试 Sybase  以本地验这些更改。
    参考:#3508#3509

orm

  • [orm] [功能]
    添加了新方法 Query.one_or_none();与 Query.one() 相同,但如果未找到行,则返回 None。感谢 esiegerman 提交的拉取请求。
  • [orm] [bug] [postgresql]
    修复了  1.0 版本中使用“executemany”在 ORM 中进行 UPDATE 语句的新功能(例如现在在 flush 中使用  executemany() 批处理 UPDATE 语句)在 PostgreSQL 和其他支持 RETURNING  的后端上会出现问题,当使用服务器端版本生成方案时,由于服务器端值是通过 RETURNING 检索的,而在使用 executemany 时不支持。
    参考:#3556
  • [orm] [错误]
    修复了在内部日志中对某些类型的内部列加载器选项进行字符串化时可能出现的罕见 TypeError。
    参考:#3539
  • [orm] [错误]
    修复了 Session.bulk_save_objects() 中的 bug,其中一个映射列具有某种“新时获取”值,并且在给定对象中不存在本地时,会导致操作中的 AttributeError。
    参考:#3525
  • [orm] [错误]
    修复了 1.0 版本中“noload”加载策略在一对多关系中无法正常工作的回归问题。加载器使用一个 API 将“None”放入字典中,这实际上不再写入值;这是 #3061 的一个副作用。
    参考:#3510

例子

  • [例子] [错误]
    修复了“history_meta”示例中的两个问题,其中历史跟踪可能遇到空历史,以及一个键入到替代属性名称的列无法正确跟踪的问题。修复由 Alex Fraser 提供。

sql

  • [sql] [错误]
    修复了 1.0 版本中默认处理多值插入语句的回归问题,#3288,在默认保持列的情况下,列类型不会传播到编译后的语句中,导致绑定级别的类型处理程序不会被调用。
    参考:#3520

postgresql

  • [postgresql] [错误]
    对于 1.0.6 版本中发布的 #3455 的新 PostgreSQL 特性进行调整,以禁用 PostgreSQL 版本 < 8.2 的功能,其中未提供 reloptions 列;这允许 Amazon Redshift 再次正常工作,因为它基于 PostgreSQL 的 8.0.x 版本。修复由 Pete Hollobon 提供。

oracle

  • [oracle] [错误] [py3k]
    修复了 cx_Oracle 版本 5.2 的支持,该版本在 Python 3 下触发了 SQLAlchemy 的版本检测,并无意中未使用正确的 Unicode 模式进行 Python 3。这会导致问题,例如绑定变量被误解释为 NULL,行被静默地未返回。
    此更改也被回溯到:0.7.0b1
    参考:#3491
  • [oracle] [错误]
    修复了 Oracle 方言中的一个错误,即反射带有引号名称以强制全部小写的表和其他符号时,在反射查询中将无法正确识别。现在,quoted_name构造应用于在“名称规范化”过程中检测为强制全部小写的传入符号名称。
    参考:#3548

杂项

  • [功能] [扩展]
    AssociationProxy构造函数中添加了AssociationProxy.info参数,以适应#2971中添加的AssociationProxy.info访问器。这是因为AssociationProxy是显式构造的,不像通过装饰器语法隐式构造的混合体。
    参考:#3551
  • [错误] [Sybase]
    修复了关于  Sybase 反射的两个问题,允许没有主键的表被反射,同时确保涉及外键检测的 SQL  语句被预先获取,以避免嵌套查询时出现驱动程序问题。这里的修复由 Eugene Zapolsky 提供;请注意,我们目前无法测试 Sybase  以本地验证这些更改。
    参考:#3508, #3509

1.0.8

发布日期:2015 年 7 月 22 日

引擎

  • [引擎] [错误]
    修复了一个严重问题,即池“checkout”事件处理程序可能针对未调用“connect”事件处理程序的陈旧连接进行调用,在池尝试重新连接并失败后;陈旧连接将保留并在随后的尝试中使用。这个问题在  1.0 系列中的影响更大,1.0.2 之后,因为它还向事件处理程序提供了一个空白的.info字典;在 1.0.2 之前,.info字典仍然是先前的字典。
    此更改也回溯至:0.7.0b1
    参考:#3497

sqlite

  • [sqlite] [错误]
    修复了 SQLite 方言中的一个错误,即反射包含非字母字符(如点或空格)的唯一约束的名称时,将不会反映其名称。
    此更改也回溯至:0.9.10
    参考:#3495

misc

  • [misc] [bug]
    修复了一个问题,即 utils 中的特定基类没有实现__slots__,因此该类的所有子类也没有实现,从而使得使用__slots__没有意义。这个问题只在 IronPython 上引起问题,显然它不兼容 cPython 的__slots__行为。
    参考:#3494

engine

  • [engine] [bug]
    修复了一个关键问题,即池中的“checkout”事件处理程序可能针对一个陈旧的连接进行调用,而“connect”事件处理程序尚未被调用,在池尝试重新连接并失败后;陈旧的连接将保留并在随后的尝试中使用。这个问题在  1.0.2 之后的 1.0 系列中影响更大,因为它还向事件处理程序提供了一个空白的.info字典;在 1.0.2 之前,.info字典仍然是先前的字典。
    此更改也回溯到:0.7.0b1
    参考:#3497

sqlite

  • [sqlite] [bug]
    修复了 SQLite 方言中的一个错误,即反射包含非字母字符(如点或空格)的唯一约束的名称时,不会反映其名称。
    此更改也回溯到:0.9.10
    参考:#3495

misc

  • [misc] [bug]
    修复了一个问题,即 utils 中的特定基类没有实现__slots__,因此该类的所有子类也没有实现,从而使得使用__slots__没有意义。这个问题只在 IronPython 上引起问题,显然它不兼容 cPython 的__slots__行为。
    参考:#3494

1.0.7

发布日期:2015 年 7 月 20 日

orm

  • [orm] [bug]
    修复了 1.0 中的回归问题,即覆盖__eq__()以返回一个非布尔类型对象的值对象,在工作单元更新操作期间进行bool()测试,而在 0.9 中,__eq__()的返回值被测试为“is True”以防止这种情况发生。
    参考:#3469
  • [orm] [bug]
    修复了  1.0 中的回归问题,即如果在“优化继承加载”中加载了“延迟”属性,则不会正确填充,这是在使用联接表继承填充过期或未加载属性的特殊  SELECT 中发出的情况下,用于填充联接表而不加载基表。这与 SQLA 1.0 不再猜测加载延迟列的事实有关,必须明确指示。
    参考:#3468
  • [orm] [bug]
    修复了 1.0 版本中的问题,即在aliased()对象上的同义词映射属性的“父实体”将解析为原始映射器,而不是其aliased()版本,从而导致依赖于此属性的Query出现问题(例如,在构造函数中给出的唯一代表性属性)无法确定查询的正确 FROM 子句。
    参考:#3466

orm declarative

  • [orm] [declarative] [bug]
    AbstractConcreteBase扩展中修复了一个 bug,即在 ABC 基类上设置一个具有不同属性名与列名的列时,该列将无法正确映射到最终的基类上。在 0.9 版本上会默默失败,而在 1.0 版本上会引发一个 ArgumentError,因此在 1.0 版本之前可能不会被注意到。
    参考:#3480

engine

  • [engine] [bug]
    修复了一个回归问题,即 ORM Query对象使用的ResultProxy上的新方法(作为#3175性能增强的一部分)在驱动程序(通常是 MySQL)无法正确生成 cursor.description 时不会引发“此结果不返回行”异常;而是会引发一个针对 NoneType 的 AttributeError。
    参考:#3481
  • [engine] [bug]
    修复了一个问题,即ResultProxy.keys()会返回未调整的内部符号名称,用于“匿名”标签,这些标签是我们在没有标签的 SQL 函数和类似情况下生成的“foo_1”类型的标签。这是作为#918 的性能增强的副作用实现的。
    参考:#3483

sql

  • [sql] [feature]
    添加了一个ColumnElement.cast()方法,其作用与独立的cast()函数相同。感谢 Sebastian Bank 的 Pull 请求。
    参考:#3459
  • [sql] [bug]
    修复了一个 bug,即在与and_()or_()结合使用时,对字面值TrueFalse的强制转换会导致 AttributeError。
    参考:#3490
  • [sql] [bug]
    修复了一个潜在问题,即自定义的FunctionElement子类或其他列元素错误地将“None”或任何其他无效对象声明为.type属性时,会报告此异常而不是递归溢出。
    参考:#3485
  • [sql] [bug]
    修复了取模 SQL 运算符无法反向工作的 bug,因为缺少了 __rmod__ 方法。感谢 dan-gittik 提交的拉取请求。

模式

  • [schema] [feature]
    增加了对 PostgreSQL 和 Oracle 支持的 CREATE SEQUENCE 的 MINVALUE、MAXVALUE、NO MINVALUE、NO MAXVALUE 和 CYCLE 参数。感谢 jakeogh 提交的拉取请求。

orm

  • [orm] [bug]
    修复了 1.0 版本中的一个问题,即值对象覆盖 __eq__() 以返回一个非布尔值对象,例如一些 geoalchemy 类型和 numpy 类型,在工作单元更新操作期间会被测试为 bool(),而在 0.9 版本中,__eq__() 的返回值被测试为“is True”以防止这种情况发生。
    参考:#3469
  • [orm] [bug]
    修复了 1.0 版本中的一个问题,即“延迟”属性在“优化继承加载”中未正确填充,这是在联接表继承的情况下发出的特殊 SELECT,用于填充过期或未加载的属性,而不加载基表。这与 SQLA 1.0 不再猜测加载延迟列有关,必须明确指定。
    参考��#3468
  • [orm] [bug]
    修复了 1.0 版本中的一个问题,即在 aliased() 对象上的同义映射属性的“父实体”将解析为原始映射器,而不是其 aliased() 版本,从而导致依赖于此属性的 Query 出现问题(例如,在构造函数中给出的唯一代表性属性)无法确定查询的正确 FROM 子句。
    参考:#3466

orm 声明

  • [orm] [declarative] [bug]
    修复了在AbstractConcreteBase扩展中的一个 bug,即在 ABC 基类上设置的列,如果属性名与列名不同,则不会正确映射到最终基类上。在 0.9 版本上失败是静默的,而在 1.0 版本上会引发一个 ArgumentError,因此在 1.0 版本之前可能不会被注意到。
    引用:#3480

engine

  • [engine] [bug]
    修复了用于 ORM Query 对象的新方法(作为 #3175 性能增强的一部分)的回归错误,在驱动程序(通常是 MySQL)无法正确生成 cursor.description  时,不会引发“此结果不返回行”异常;而是会引发 AttributeError。反而会引发针对 NoneType 的  AttributeError。
    引用:#3481
  • [engine] [bug]
    修复了ResultProxy.keys()返回未调整的内部符号名称的回归错误,这些名称是我们在没有标签的 SQL 函数和类似情况下生成的“foo_1”类型的标签。这是作为 #918 的一部分实施的性能增强的副作用。
    引用:#3483

sql

  • [sql] [feature]
    添加了一个 ColumnElement.cast() 方法,其作用与独立的 cast() 函数相同。此功能感谢 Sebastian Bank 提交的拉取请求。
    引用:#3459
  • [sql] [bug]
    修复了将字面常量TrueFalseand_()or_()结合使用时会导致 AttributeError 的错误。
    引用:#3490
  • [sql] [bug]
    修复了自定义 FunctionElement 或其他列元素的子类错误地将“None”或任何其他无效对象陈述为.type属性时报告此异常而不是递归溢出的潜在问题。
    引用:#3485
  • [sql] [bug]
    修复了取模 SQL 运算符无法反转的错误,原因是缺少了__rmod__方法。此修复感谢 dan-gittik 提交的拉取请求。

schema

  • [schema] [feature]
    添加了对 CREATE  SEQUENCE 的 MINVALUE、MAXVALUE、NO MINVALUE、NO MAXVALUE 和 CYCLE 参数的支持,这些参数由  PostgreSQL 和 Oracle 支持。此功能感谢 jakeogh 提交的拉取请求。

1.0.6

发布日期:2015 年 6 月 25 日

orm

  • [orm] [bug]
    修复了 1.0 系列中的一个重大回归问题,即当  version_id_counter  功能导致对象的版本计数器在对象的行没有净变化时被增加,而是通过关系(例如通常是一对多)与之相关联或取消关联时,会导致一个 UPDATE  语句更新对象的版本计数器而不做其他任何操作。在相对较新的“服务器端”和/或“程序化/条件化”版本计数器功能被使用的用例中(例如将  version_id_generator 设置为 False),这个错误可能导致发出一个没有有效 SET 子句的 UPDATE。
    参考:#3465
  • [orm] [bug]
    修复了 1.0 版本中的一个问题,即对于不使用任何鉴别器的单继承子类的显式连接条件进行 JOIN 时,单继承连接的增强行为#3222不适当地发生,导致额外的“AND NULL”子句。
    参考:#3462
  • [orm] [bug]
    修复了新的Session.bulk_update_mappings()功能中的一个 bug,其中用于定位行的 WHERE 子句中使用的主键列也会包含在 SET 子句中,将它们的值不必要地设置为它们自己。感谢 Patrick Hayes 的拉取请求。
    参考:#3451
  • [orm] [bug]
    修复了一个意外使用回归问题,即自定义Comparator对象使用__clause_element__()方法并返回一个 ORM 映射的InstrumentedAttribute对象而不是显式地ColumnElement时,当作为表达式传递给Session.query()时将无法正确处理。0.9 版本的逻辑恰好成功处理了这个问题,因此现在支持这种用例。
    参考:#3448

sql

  • [sql] [bug]
    修复了一个 bug,其中应用于Label对象的子句适应在所有情况下都会失败,以至于任何使用Label.self_group()的 SQL 操作都会使用原始未适应的表达式。这将导致 ORM aliased()构造无法完全适应由column_property映射的属性,因此在某些类型的 SQL 比较中,未别名化的表可能泄漏出来。
    参考:#3445

postgresql

  • [postgresql] [feature]
    添加了对在 CREATE INDEX 下使用存储参数的支持,使用新的关键字参数postgresql_with。还添加了反射支持,以支持postgresql_with标志以及postgresql_using标志,这些标志现在将设置在反射的Index对象上,并且还存在于Inspector.get_indexes()结果中的新“dialect_options”字典中。感谢 Pete Hollobon 的拉取请求。
    另请参阅
    索引存储参数
    参考:#3455
  • [postgresql] [feature]
    添加了新的执行选项max_row_buffer,当使用stream_results选项时,由 psycopg2 方言解释,设置了可分配的行缓冲区大小限制。该值还是基于发送给Query.yield_per()的整数值提供的。感谢 mcclurem 的拉取请求。
  • [postgresql] [bug] [pypy]
    重新修复了在  1.0.5 版本中首次发布的问题,以再次修复 psycopg2cffi 对 JSONB 支持,因为他们在 2.7.1 版本中突然切换到对  JSONB 类型的无条件解码。版本检测现在指定 2.7.1 作为我们应该期望 DBAPI 为我们进行 json 编码的地方。
    参考:#3439
  • [postgresql] [bug]
    修复了ExcludeConstraint构造以支持其他对象(如Index)现在支持的常见功能,即列表达式可以被指定为任意 SQL 表达式,如casttext
    引用:#3454

mssql

  • [mssql] [bug]
    修复了在使用 VARBINARY 类型与 NULL + pyodbc 的 INSERT 时出现的问题;pyodbc 需要传递一个特殊对象才能持久化 NULL。由于 #3039 的原因,VARBINARY 类型现在通常是 LargeBinary 的默认类型之一,因此该问题在 1.0 版本中部分是一个回归。pymssql 驱动程序似乎不受影响。
    引用:#3464

杂项

  • [bug] [documentation]
    修复了一个内部“记忆化”方法类型的例程,使得不再使用 Python 描述符;修复了这些方法的可检查性,包括对 Sphinx 文档的支持。
    引用:#2077

orm

  • [orm] [bug]
    修复了 1.0 系列中的一个重大回归,即当版本  _id_counter  功能导致对象的版本计数器在对象的行没有净变化时被递增时,而是通过关系与之相关联(例如通常是多对一关系)或与之解除关联,导致更新语句仅更新对象的版本计数器而不更新其他内容。在相对较新的“服务器端”和/或“程序化/条件性”版本计数器功能(例如将  version_id_generator 设置为 False)的使用案例中,该错误可能导致发出无有效 SET 子句的更新。
    引用:#3465
  • [orm] [bug]
    修复了 1.0 版本中的一个回归,即对于一个没有使用任何鉴别器的单继承子类,通过显式连接条件进行 JOIN 时,增强的单继承连接行为不适当地发生,导致额外的“AND NULL”子句。
    引用:#3462
  • [orm] [bug]
    修复了新的Session.bulk_update_mappings()功能中的一个 bug,即在用于定位行的 WHERE 子句中使用的主键列也会包含在 SET 子句中,将它们的值不必要地设置为它们自己。感谢 Patrick Hayes 的拉取请求。
    参考:#3451
  • [orm] [bug]
    修复了一个意外使用回归,即自定义Comparator对象使用了__clause_element__()方法并返回一个 ORM 映射的InstrumentedAttribute对象而不是显式地ColumnElement时,当作为表达式传递给Session.query()时无法正确处理。0.9 版本中的逻辑恰好成功,因此现在支持这种用例。
    参考:#3448

sql

  • [sql] [bug]
    修复了一个 bug,即应用于Label对象的子句适应在某些情况下无法容纳带标签的 SQL 表达式,因此任何使用Label.self_group()的 SQL 操作都将使用原始未适应的表达式。其中一个影响是,ORM aliased() 构造不会完全适应由column_property映射的属性,因此在某些类型的 SQL 比较中,未别名化的表可能泄漏出来。
    参考:#3445

postgresql

  • [postgresql] [feature]
    添加了对在 CREATE INDEX 下使用存储参数的支持,使用新的关键字参数 postgresql_with。还添加了反射支持,以支持 postgresql_with 标志和 postgresql_using 标志,这些标志现在将设置在反射的Index对象上,并在Inspector.get_indexes()的结果中以新的“dialect_options”字典的形式呈现。感谢 Pete Hollobon 的拉取请求。
    另请参见
    索引存储参数
    参考文献:#3455
  • [postgresql] [feature]
    添加了新的执行选项max_row_buffer,当使用stream_results选项时,由 psycopg2 方言解释,该选项设置可以分配的行缓冲区的大小限制。这个值也是根据发送给Query.yield_per()的整数值提供的。感谢 mcclurem 的拉取请求。
  • [postgresql] [bug] [pypy]
    重新修复了在  1.0.5 中首次发布的此问题,以再次修复 psycopg2cffi 的 JSONB 支持,因为他们突然在版本 2.7.1 中无条件地切换了对  JSONB 类型的解码。版本检测现在指定 2.7.1 作为我们应该期望 DBAPI 为我们进行 json 编码的位置。
    参考文献:#3439
  • [postgresql] [bug]
    修复了ExcludeConstraint结构,以支持其他对象(如Index)现在支持的常见功能,即列表达式可以指定为任意的 SQL 表达式,如casttext
    参考文献:#3454

mssql

  • [mssql] [bug]
    修复了在使用VARBINARY类型与插入 NULL + pyodbc 时出现的问题;pyodbc 需要传递一个特殊对象才能持久化 NULL。由于#3039VARBINARY类型现在通常是LargeBinary的默认值,所以这个问题在 1.0 中部分是一个退化。pymssql 驱动程序似乎不受影响。
    参考文献:#3464

misc

  • [bug] [documentation]
    修复了内部的“记忆化”方法类型,不再使用 Python 描述符;修复了这些方法的可检查性,包括对 Sphinx 文档的支持。
    参考文献:#2077


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

相关文章
|
4月前
|
SQL 缓存 关系型数据库
SqlAlchemy 2.0 中文文档(七十四)(2)
SqlAlchemy 2.0 中文文档(七十四)
36 1
|
4月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(七十四)(1)
SqlAlchemy 2.0 中文文档(七十四)
66 1
|
4月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(五十七)(9)
SqlAlchemy 2.0 中文文档(五十七)
86 0
|
4月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(五十七)(7)
SqlAlchemy 2.0 中文文档(五十七)
50 0
|
4月前
|
SQL API Python
SqlAlchemy 2.0 中文文档(五十七)(6)
SqlAlchemy 2.0 中文文档(五十七)
33 0
|
4月前
|
SQL 存储 测试技术
SqlAlchemy 2.0 中文文档(五十七)(4)
SqlAlchemy 2.0 中文文档(五十七)
35 0
|
4月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(五十七)(8)
SqlAlchemy 2.0 中文文档(五十七)
52 0
|
4月前
|
SQL 关系型数据库 数据库
SqlAlchemy 2.0 中文文档(五十七)(2)
SqlAlchemy 2.0 中文文档(五十七)
26 0
|
4月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(五十七)(1)
SqlAlchemy 2.0 中文文档(五十七)
42 0
|
4月前
|
SQL Python
SqlAlchemy 2.0 中文文档(五十七)(5)
SqlAlchemy 2.0 中文文档(五十七)
22 0