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.schema
和Sequence.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]
修复了TypeDecorator
和Variant
类型未被 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.schema
和Sequence.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 方言未能深入检查TypeDecorator
和Variant
类型,以确定是否应该渲染 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=False
与Engine
时,结果集未能正确适应结果集中的重复列名,导致在 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 中发生,任何处于尝试提交时出现错误而回滚事务的地方,包括Session
和Connection
提供的上下文管理器,并在诸如“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 中的任何事务因尝试提交时发生错误而被回滚时发生,包括Session
和Connection
提供的上下文管理器,并在诸如“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 反射中的错误,其中DATETIME
、TIMESTAMP
和TIME
类型的“小数部分”会被错误地放置到未使用的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 反射中的错误,其中DATETIME
、TIMESTAMP
和TIME
类型的“小数部分”会错误地放置到未被 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
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
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]
修复了一个回归问题,即 ORMQuery
对象使用的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_()
结合使用时,对字面值True
或False
的强制转换会导致 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]
修复了用于 ORMQuery
对象的新方法(作为 #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]
修复了将字面常量True
或False
与and_()
或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 操作都会使用原始未适应的表达式。这将导致 ORMaliased()
构造无法完全适应由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 表达式,如cast
或text
。
引用:#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 操作都将使用原始未适应的表达式。其中一个影响是,ORMaliased()
构造不会完全适应由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 表达式,如cast
或text
。
参考文献:#3454
mssql
- [mssql] [bug]
修复了在使用VARBINARY
类型与插入 NULL + pyodbc 时出现的问题;pyodbc 需要传递一个特殊对象才能持久化 NULL。由于#3039,VARBINARY
类型现在通常是LargeBinary
的默认值,所以这个问题在 1.0 中部分是一个退化。pymssql 驱动程序似乎不受影响。
参考文献:#3464
misc
- [bug] [documentation]
修复了内部的“记忆化”方法类型,不再使用 Python 描述符;修复了这些方法的可检查性,包括对 Sphinx 文档的支持。
参考文献:#2077
SqlAlchemy 2.0 中文文档(六十三)(4)https://developer.aliyun.com/article/1560864