SqlAlchemy 2.0 中文文档(六十六)(2)https://developer.aliyun.com/article/1560806
0.7.7
发布日期:Sat May 05 2012
orm
- [orm] [feature]
向 Query 添加了 prefix_with() 方法,调用 select().prefix_with() 以允许在语句中放置 MySQL SELECT 指令。由 Diana Clarke 提供。
参考:#2443 - [orm] [feature]
添加了新的标志 @validates include_removes。当为 True 时,还将集合移除和属性删除事件发送到验证函数,当使用此标志时,该函数接受额外的参数“is_remove”。 - [orm] [bug]
在工作单元中修复了一个问题,即将非空的自引用多对一关系设置为 None 时,如果原值尚未加载,则更改将无法持久化。
参考:#2477 - [orm] [bug]
修复了 0.7.6 中引入的错误,即在针对已映射为联接或其他间接可选择项的列使用 column_mapped_collection 时,将无法正常运行。
参考:#2409 - [orm] [bug]
修复了 polymorphic_on 列在类中未被映射时错误地包含在 merge() 操作中引发错误的错误。
参考:#2449 - [orm] [bug]
修复了表达式注释机制中的错误,这可能导致 SELECT 语句的错误渲染,特别是在使用 column_property() 时使用别名和连接时。
参考:#2453 - [orm] [bug]
修复了会阻止 OrderingList 可以 pickle 的错误。由 Jeff Dairiki 提供
参考:#2454 - [orm] [bug]
修复了关系比较中的错误,即调用未实现的方法如 SomeClass.somerelationship.like() 将产生递归溢出,而不是 NotImplementedError。
sql
- [sql] [feature]
添加了新的连接事件 dbapi_error()。在所有 DBAPI 级错误时调用,传递原始的 DBAPI 异常,然后 SQLAlchemy 修改游标的状态。 - [sql] [bug]
移除了在创建索引时没有列时的警告;虽然这可能不是用户期望的行为,但作为索引只是某个名称的索引是有效的用例。 - [sql] [bug]
如果在调用 “with engine.begin()” 时 conn.begin() 失败,则会在正常传播异常之前显式关闭新获取的 Connection。 - [sql] [bug]
将 BINARY 和 VARBINARY 添加到 types.all。
参考:#2474
postgresql
- [postgresql] [feature]
为 PostgreSQL 添加了新的 for_update/with_lockmode() 选项:for_update=”read”/ with_lockmode(“read”),for_update=”read_nowait”/ with_lockmode(“read_nowait”)。这些分别发出 “FOR SHARE” 和 “FOR SHARE NOWAIT”。感谢 Diana Clarke。
参考:#2445 - [postgresql] [bug]
在反射域时删除了不必要的表子句。
参考:#2473
mysql
- [mysql] [bug]
修复了一个 bug,即在 InnoDB 中使用自增复合列的“KEY”子句中的列名会双引号一个是保留字的名称。感谢 Jeff Dairiki。
参考:#2460 - [mysql] [bug]
修复了一个 bug,即当“information_schema”模式的 get_view_names() 无法检索标记为“SYSTEM VIEW”的视图时会失败。感谢 Matthew Turland。 - [mysql] [bug]
修复了一个 bug,即如果 cast() 在不支持 cast() 的 SQL 表达式上使用,因此方言不会渲染 CAST,则如果转换的表达式需要分组,则评估顺序可能会更改;现在将对这些表达式应用分组。
参考:#2467
sqlite
- [sqlite] [feature]
添加了 SQLite 执行选项 “sqlite_raw_colnames=True”,将绕过 SQLite cursor.description 返回的列名中的 “.” 的尝试删除。
参考:#2475 - [sqlite] [bug]
当表的主键列被替换时,比如通过 extend_existing,由 insert() 构造函数使用的“自动增量”列会被重置。之前它会继续引用以前的主键列。
参考:#2525
mssql
- [mssql] [feature]
向 PyODBC 方言添加了临时 create_engine 标志 supports_unicode_binds,以强制该方言是否将 Python unicode 文字传递给 PyODBC。 - [mssql] [bug]
修复了使用 pyodbc 方言时 use_scope_identity create_engine() 标志的问题。之前,如果设置为 False,此标志将被忽略。当设置为 False 时,对于那些“implicit_returning”设置为 False 的表,将在每次插入后获得“SELECT @@identity”以获取最后插入的 ID。 - [mssql] [bug]
使用 SQL Server 的 UPDATE…FROM 语法要求在 FROM 子句中存在被更新的表,当该表的别名也存在于 FROM 子句中时。如果 FROM 子句首次出现,则更新后的表现在始终存在于 FROM 子句中。感谢 sayap。
参考:#2468
orm
- [orm] [feature]
为 Query 添加了 prefix_with()方法,调用 select().prefix_with()以允许在语句中放置 MySQL SELECT 指令。感谢 Diana Clarke
参考:#2443 - [orm] [feature]
为@validates 添加了新标志 include_removes。当为 True 时,集合删除和属性删除事件也将发送到验证函数,当使用此标志时,验证函数将接受额外参数“is_remove”。 - [orm] [bug]
修复了工作单元中的问题,即将非 None 的自引用多对一关系设置为 None 时,如果前一个值尚未加载,则无法持久化更改。
参考:#2477 - [orm] [bug]
修复了 0.7.6 版本中引入的 bug,即对于被映射为连接或其他间接可选择的列使用 column_mapped_collection 会导致功能失效。
参考:#2409 - [orm] [bug]
修复了多态 _on 列未在类中映射的���况下错误地包含在 merge()操作中的 bug,导致错误。
参考:#2449 - [orm] [bug]
修复了表达式注释机制中的 bug,可能导致带有别名和连接的 SELECT 语句的不正确渲染,特别是在使用 column_property()时。
参考:#2453 - [orm] [bug]
修复了阻止 OrderingList 可被 pickle 的 bug。感谢 Jeff Dairiki
参考:#2454 - [orm] [bug]
修复了关系比较中的 bug,即调用未实现的方法(如 SomeClass.somerelationship.like())会导致递归溢出,而不是 NotImplementedError。
sql
- [sql] [feature]
添加了新的 connection event dbapi_error()。对于所有 DBAPI 级别的错误,会在 SQLAlchemy 修改游标状态之前调用原始的 DBAPI 异常。 - [sql] [bug]
当创建 Index 时没有列时移除警告;虽然这可能不是用户想要的,但作为一个只有特定名称的索引的占位符是有效的用例。 - [sql] [bug]
在调用“with engine.begin()”时,如果 conn.begin()失败,则新获取的连接在正常传播异常之前会被显式关闭。 - [sql] [bug]
将 BINARY、VARBINARY 添加到 types.all 中。
参考:#2474
postgresql
- [postgresql] [feature]
为 PostgreSQL 添加了新的 for_update/with_lockmode()选项:for_update=”read”/with_lockmode(“read”),for_update=”read_nowait”/with_lockmode(“read_nowait”)。这些分别发出“FOR SHARE”和“FOR SHARE NOWAIT”。感谢 Diana Clarke
参考:#2445 - [postgresql] [bug]
在反射域时移除了不必要的表子句。
参考:#2473
mysql
- [mysql] [bug]
修复了一个 bug,即对于 InnoDB 中具有自增复合列的“KEY”子句内的列名,会将名称重复引用为保留字。由 Jeff Dairiki 提供。
参考:#2460 - [mysql] [bug]
修复了一个 bug,即对于标记为“SYSTEM VIEW”的视图,get_view_names() 对于“information_schema”模式将无法检索到;由 Matthew Turland 提供。 - [mysql] [bug]
修复了一个 bug,即如果对不支持的 SQL 表达式使用了 cast(),因此方言不会渲染 CAST,则如果要求对被转换的表达式进行分组,则评估顺序可能会更改;现在将对这些表达式应用分组。
参考:#2467
sqlite
- [sqlite] [feature]
添加了 SQLite 执行选项“sqlite_raw_colnames=True”,将绕过 SQLite cursor.description 返回的列名中的“.” 移除尝试。
参考:#2475 - [sqlite] [bug]
当替换 Table 的主键列时,例如通过 extend_existing,由 insert() 构造使用的“自动增量”列将被重置。以前,它将继续引用先前的主键列。
参考:#2525
mssql
- [mssql] [feature]
添加了临时 create_engine 标志 supports_unicode_binds 到 PyODBC 方言,用于强制该方言是否将 Python unicode 文字传递给 PyODBC。 - [mssql] [bug]
修复了在使用 pyodbc 方言时,使用 use_scope_identity create_engine() 标志的问题。以前,如果将此标志设置为 False,则会被忽略。当设置为 False 时,每次 INSERT 后都会获得“SELECT @@identity”,以获取最后插入的 ID,对于那些将“implicit_returning”设置为 False 的表。 - [mssql] [bug]
使用 SQL Server 的 UPDATE…FROM 语法要求在 FROM 子句中同时存在更新的表和该表的别名。现在,当 FROM 存在时,更新的表始终存在于 FROM 中。由 sayap 提供。
参考:#2468
0.7.6
发布日期:2012 年 3 月 14 日(星期三)
orm
- [orm] [feature]
向 Session 添加了“no_autoflush”上下文管理器,与 with 一起使用:将暂时禁用自动刷新。 - [orm] [feature]
向 Query 添加了 cte() 方法,调用来自 Core 的公共表达式支持(见下文)。
参考:#1859 - [orm] [feature]
添加了通过 query(sometable).filter_by(colname=value) 查询绑定到 Table 的列名的能力。
参考:#2400 - [orm] [bug]
修复了一个事件注册 bug,主要表现为在与 Session 类关联的事件在创建了 sessionmaker() 实例后未注册。
参考:#2424 - [orm] [bug]
修复了一个错误,即在主键连接条件中带有“literal”会在某些深度嵌套表达式中的编译时多次渲染相同的绑定参数名称时引发错误。
参考:#2425 - [orm] [bug]
移除了对执行多行删除时受影响行数的检查。如果两行之间存在 ON DELETE CASCADE,我们无法从 DBAPI 中获取准确的行数;在大多数情况下,这个特定计数也不受大多数 DBAPI 的支持,MySQLdb 是一个例外情况。
参考:#2403 - [orm] [bug]
修复了一个错误,即使用 attribute_mapped_collection 或 column_mapped_collection 的对象无法被 pickled。
参考:#2409 - [orm] [bug]
修复了一个错误,即如果 MappedCollection 仅在使用了 @collection.internally_instrumented 的自定义子类中使用,则无法获得适当的集合工具。
参考:#2406 - [orm] [bug]
修复了一个错误,即 SQL 适配机制在涉及联合继承、joinedload()、limit() 和列子句中的衍生函数的非常嵌套场景中会失败。
参考:#2419 - [orm] [bug]
修复了 CascadeOptions 的 repr(),以包括 refresh-expire。同时重新设计了 CascadeOptions 为 。
参考:#2417 - [orm] [bug]
改进了“声明式反射”示例,以支持单表继承、多次调用 prepare()、存在于备选模式中的表以及仅建立一部分类作为反射。 - [orm] [bug]
缩小了在 flush() 中应用的测试范围,仅在确实有更新时才检查对同一表中部分空主键的 UPDATE 是否存在。
参考:#2390 - [orm] [bug]
修复了一个错误,即如果方法名与列名冲突,当映射器尝试检查方法对象上的 get() 方法时,会引发 TypeError。
参考:#2352
examples
- [examples] [bug]
在 Beaker 示例中修改了 _params_from_query() 函数,从完全编译的语句中提取绑定参数,作为获取包括列子句中的子查询等所有内容的快速手段。
engine
- [engine] [feature]
为连接添加了“no_parameters=True”执行选项。如果没有参数,则会将语句传递给 cursor.execute(statement),从而调用 DBAPI 在没有参数集合时的行为;对于 psycopg2 和 mysql-python,这意味着不解释字符串中的%符号。只有在使用此选项时才会发生这种情况,而不仅仅是参数列表为空,否则这将产生 SQL 表达式的不一致行为,这些表达式通常会转义百分号(并且在编译时,有时无法提前知道参数是否存在)。
参考:#2407 - [engine] [feature]
添加了 pool_reset_on_return 参数到 create_engine,允许控制“连接返回”行为。还添加了新参数‘rollback’,‘commit’,None 到 pool.reset_on_return,以允许更多控制连接返回活动。
参考:#2378 - [engine] [feature]
为 Engine、Connection 添加了一些不错的上下文管理器:
with engine.begin() as conn: # <work with conn in a transaction> ...
- 并且:
with engine.connect() as conn: # <work with conn> ...
- 在 engine.begin()上完成连接时,无论是提交还是回滚事务都会关闭连接。
- [engine] [bug]
在 MockConnection(即与 strategy=”mock”一起使用的连接)中添加了 execution_options()调用,作为参数的传递。
sql
- [sql] [feature]
添加了对 SQL 标准通用表达式(CTE)的支持,允许将 SELECT 对象作为 CTE 源(尚不支持 DML)。这通过任何 select()构造上的 cte()方法调用。
参考:#1859 - [sql] [bug]
修复了在使用特定类型的结果获取时,当使用 C 扩展时会发生内存泄漏的核心问题,特别是在调用 orm query.count()时。
参考:#2427 - [sql] [bug]
修复了在行上基于属性访问时,非 C 版本会引发 AttributeError,C 版本会引发 NoSuchColumnError 的问题。现在在两种情况下都会引发 AttributeError。
参考:#2398 - [sql] [bug]
添加了使用 Column 的.key 作为结果集行的字符串标识符的支持。.key 目前被列为列的“备用”名称,并且被具有该键值作为其常规名称的列所取代。对于 SQLAlchemy 的下一个主要版本,我们可能会反转这种优先顺序,使.key 优先,但目前尚未决定。
参考:#2392 - [sql] [bug]
在 insert()或 update()构造的 values()子句中声明不存在的列时会发出警告。将在 0.8 版本中转为异常。
参考:#2413 - [sql] [bug]
对于在 SELECT 语句中应用标签的方式进行了重大更改,允许“截断”标签,即在 Python 中生成的标签名称超过最大标识符长度时(请注意,可以通过 create_engine() 中的 label_length 进行配置),在子查询中正确引用,以及在结果集行中使用它们的原始 Python 名称。
参考:#2396 - [sql] [bug]
修复了新的“autoload_replace”标志中的 bug,该 bug 会导致无法保留反射表的主键约束。
参考:#2402 - [sql] [bug]
当传递的参数无法解释为列或表达式时,Index 将引发异常。当创建 Index 时没有传递任何列时将发出警告。
参考:#2380
mysql
- [mysql] [feature]
通过 Index 和 PrimaryKeyConstraint 的新 mysql_using 参数,支持 MySQL 索引和主键约束类型(即 USING),感谢 Diana Clarke。
参考:#2386 - [mysql] [feature]
为所有 MySQL 方言添加了对“isolation_level”参数的支持。感谢 mu_mind 提供的补丁。
参考:#2394
sqlite
- [sqlite] [bug]
修复了 C 扩展中的一个 bug,即当作为整数返回的 Numeric 值不会应用字符串格式;这主要影响了 SQLite,因为它不维护数字比例设置。
参考:#2432
mssql
- [mssql] [feature]
添加了对 MSSQL INSERT、UPDATE 和 DELETE 表提示的支持,使用 UpdateBase 上的新 with_hint() 方法。
参考:#2430
oracle
- [oracle] [feature]
添加了一个新的 create_engine() 标志 coerce_to_decimal=False,禁用精确数值处理,可以通过将所有数值转换为 Decimal 来增加大量开销。
参考:#2399 - [oracle] [bug]
添加了对 LONG 的缺失编译支持
参考:#2401 - [oracle] [bug]
将“LEVEL”添加到 Oracle 的保留字列表中。
参考:#2435
orm
- [orm] [feature]
向 Session 添加了“no_autoflush”上下文管理器,与 with 一起使用:将临时禁用自动刷新。 - [orm] [feature]
向 Query 添加了 cte() 方法,调用 Core 中的公共表达式支持(见下文)。
参考:#1859 - [orm] [feature]
在使用 query(sometable).filter_by(colname=value) 时,添加了查询表绑定列名的功能。
参考:#2400 - [orm] [bug]
修复了事件注册 bug,主要表现为在与事件关联到 Session 类之后创建的 sessionmaker() 实例中未注册事件。
参考:#2424 - [orm] [bug]
修复了一个 bug,当主键连接条件中存在“字面值”时,在某些需要多次渲染相同绑定参数名称的深度嵌套表达式编译时会引发错误。
参考:#2425 - [orm] [bug]
移除了在对映射对象执行多重删除时检查受影响行数的检查。如果两行之间存在 ON DELETE CASCADE,则无法从 DBAPI 中获取准确的行数;在大多数 DBAPI 中,此特定计数不受支持,MySQLdb 是一个显著的例外。
参考:#2403 - [orm] [bug]
修复了一个 bug,使用 attribute_mapped_collection 或 column_mapped_collection 的对象无法被 pickle。
参考:#2409 - [orm] [bug]
修复了一个 bug,当仅在使用了 @collection.internally_instrumented 的自定义子类中使用 attribute_mapped_collection 或 column_mapped_collection 时,MappedCollection 将无法获得适当的集合仪器。
参考:#2406 - [orm] [bug]
修复了一个 bug,当涉及到 joined-inheritance、joinedload()、limit() 和列子句中的派生函数的非常嵌套的情况时,SQL 适配机制会失败。
参考:#2419 - [orm] [bug]
修复了 CascadeOptions 的 repr(),以包含 refresh-expire。还重新设计了 CascadeOptions 为 。
参考:#2417 - [orm] [bug]
改进了“声明式反射”示例,以支持单表继承、多次调用 prepare()、存在于备选模式中的表,以及仅将部分类反映为反映的子集。 - [orm] [bug]
缩小了在 flush() 中应用的测试范围,以检查在一个表内部对部分为空的主键进行 UPDATE,只有在真正有 UPDATE 发生时才会发生。
参考:#2390 - [orm] [bug]
修复了一个 bug,当方法名与列名冲突时,映射器尝试检查方法对象上的 get() 方法时会引发 TypeError。
参考:#2352
示例
- [examples] [bug]
修改了 Beaker 示例中的 _params_from_query() 函数,从完全编译的语句中提取 bindparams,作为快速获取包括子查询在内的列子句中的一切的手段。
引擎
- [engine] [feature]
对连接添加了“no_parameters=True”执行选项。如果没有参数,将会将语句传递给cursor.execute(statement),从而调用 DBAPI 在没有参数集合时的行为;对于 psycopg2 和 mysql-python,这意味着不解释字符串中的%符号。这仅在使用此选项时发生,并且不仅仅是如果参数列表为空,否则这将产生通常转义百分号的 SQL 表达式的不一致行为(并且在编译时,有时候无法提前知道参数是否存在)。
参考:#2407 - [engine] [feature]
添加了 pool_reset_on_return 参数到 create_engine,允许控制“连接返回”行为。还添加了新参数‘rollback’,‘commit’,None 到 pool.reset_on_return,以允许更多对连接返回活动的控制。
参考:#2378 - [engine] [feature]
为 Engine、Connection 添加了一些体面的上下文管理器:
with engine.begin() as conn: # <work with conn in a transaction> ...
- 和:
with engine.connect() as conn: # <work with conn> ...
- 在完成时关闭连接,使用 engine.begin()提交或回滚事务时产生错误。
- [engine] [bug]
对 MockConnection(即 strategy=”mock”时使用的)添加了 execution_options()调用,其作为参数的传递。
sql
- [sql] [feature]
添加了对 SQL 标准通用表达式(CTE)的支持,允许 SELECT 对象作为 CTE 源(尚未支持 DML)。这通过任何 select()构造的 cte()方法调用。
参考:#1859 - [sql] [bug]
修复了当 C 扩展与特定类型的结果提取一起使用时会发生的核心内存泄漏,特别是在调用 orm query.count()时。
参考:#2427 - [sql] [bug]
修复了在行上进行基于属性的列访问会引发 AttributeError(对于非 C 版本)或 NoSuchColumnError(对于 C 版本)的问题。现在在两种情况下都引发 AttributeError。
参考:#2398 - [sql] [bug]
添加了使用列的.key 作为结果集行中字符串标识符的支持。.key 目前被列为列的“替代”名称,并且被具有该键值作为其常规名称的列所取代。对于 SQLAlchemy 的下一个主要版本,我们可能会改变这种优先级,以便.key 优先,但目前尚未决定。
参考:#2392 - [sql] [bug]
在 insert()或 update()构造的 values()子句中声明了不存在的列时会发出警告。将在 0.8 中移动到异常。
参考:#2413 - [sql] [bug]
对于 SELECT 语句中应用到列的标签的应用方式发生了重大变化,允许“截断”标签,即在 Python 中生成的标签名称超过最大标识符长度时(请注意,这可以通过 create_engine() 中的 label_length 进行配置),在子查询中正确引用,并且在结果集行中以其原始的 Python 名称存在。
参考:#2396 - [sql] [错误]
修复了新的“autoload_replace”标志中的错误,该标志会失败地保留反映表的主键约束。
参考:#2402 - [sql] [错误]
当传递的参数无法解释为列或表达式时,Index 将引发错误。当创建 Index 时没有传递任何列时会发出警告。
参考:#2380
mysql
- [mysql] [功能]
通过新的 mysql_using 参数向 Index 和 PrimaryKeyConstraint 添加了对 MySQL 索引和主键约束类型(即 USING)的支持,感谢 Diana Clarke。
参考:#2386 - [mysql] [功能]
向所有 MySQL 方言添加了“isolation_level”参数的支持。感谢 mu_mind 提供的补丁。
参考:#2394
sqlite
- [sqlite] [错误]
修复了 C 扩展中的错误,即当作为整数返回的 Numeric 值不会应用字符串格式时出错;这主要影响了不维护数字精度设置的 SQLite。
参考:#2432
mssql
- [mssql] [功能]
添加了对 MSSQL INSERT、UPDATE 和 DELETE 表提示的支持,使用 UpdateBase 上的新 with_hint() 方法。
参考:#2430
oracle
- [oracle] [功能]
添加了一个新的 create_engine() 标志 coerce_to_decimal=False,禁用精度数值处理,因为将所有数值转换为 Decimal 可以增加大量开销。
参考:#2399 - [oracle] [错误]
添加了对 LONG 的编译支持的缺失。
参考:#2401 - [oracle] [错误]
将“LEVEL”添加到 Oracle 的保留字列表中。
参考:#2435
版本:0.7.5
发布日期:2012 年 1 月 28 日(周六)
orm
- [orm] [功能]
向 declarative_base() 添加了“class_registry”参数。允许两个或更多声明基类共享相同的类名注册表。 - [orm] [功能]
query.filter() 接受多个条件,它们将通过 AND 连接,即 query.filter(x==y, z>q, …) - [orm] [功能]
添加了新的功能,使关系加载器选项可以允许“默认”加载策略。将‘*’传递给 joinedload()、lazyload()、subqueryload() 或 noload() 中的任何一个,这将成为用于所有关系的加载策略,除非在查询中明确指定了其他策略。感谢新兴贡献者 Kent Bower 提供了详尽而写得很好的测试套件!
参考:#2351 - [orm] [feature]
添加了新的声明式反射示例,演示了如何最好地将表反射与声明式混合使用,并使用了一些新功能。
参考:#2356 - [orm] [bug]
修复了在失败的 flush 后建立修改的会话状态会作为随后由手动调用 rollback() 后自动开始的事务的一部分提交的问题。在 rollback() 中检查会话状态,如果存在新状态,则发出警告并第二次调用 restore_snapshot(),丢弃这些更改。
参考:#2389 - [orm] [bug]
修复了从 0.7.4 版本开始的回归问题,即使用超类中已经被检测的列作为“polymorphic_on”时无法解析基础列的问题。
参考:#2345 - [orm] [bug]
如果 xyzload_all() 与两个未连接的关系不当使用,则引发异常。
参考:#2370 - [orm] [bug]
修复了事件监听器 event.listen(SomeClass) 强制进行完全不必要的映射器编译的 bug,使得在模块导入时设置事件非常困难(难道没有人注意到这个问题吗?)
参考:#2367 - [orm] [bug]
修复了 hybrid_property 作为 any()、has() 中的关键字参数时无法正常工作的 bug。 - [orm] [bug]
确保所有 ORM 异常都可以被 pickle,以实现多进程兼容性。
参考:#2371 - [orm] [bug]
实现了标准的“无法设置属性”/“无法删除属性” AttributeError,当在混合属性上使用 setattr/delattr 时,如果没有定义 fset 或 fdel。
参考:#2353 - [orm] [bug]
修复了反序列化对象时,如果对象在 eq() 或类似方法中需要 ORM 属性访问,未设置足够状态以正确工作的 bug。
参考:#2362 - [orm] [bug]
修复了“合并”级联可能会错误解释未加载属性的 bug,如果在 relationship() 中使用了 load_on_pending 标志。感谢 Kent Bower 提供的测试。
参考:#2374 - [orm]
修复了从 0.6 版本开始的回归问题,即如果在挂起对象上需要发出非“get()”懒惰子句的“load_on_pending”relationship()标志,则加载将失败。
示例
- [examples] [feature]
简化了版本示例,使用了一个声明性 mixin 和一个事件监听器,而不是元类+SessionExtension。
引用:#2313 - [examples] [bug]
修复了在删除表之前关闭会话的大型集合.py 的问题。
引用:#2346
引擎
- [engine] [bug]
为 StatementError、DBAPIError、列错误添加了 reduce,以便异常可被 pickle 化,例如在使用多进程时。但是,目前并非所有的 DBAPI 都支持这一点,比如 psycopg2。
引用:#2371 - [engine] [bug]
当向 SQLite 使用的任何日期/时间处理器传递非字符串或无效字符串时,改进了错误消息,包括 C 和 Python 版本。
引用:#2382 - [engine] [bug]
修复了一个 bug,即一个名为“”的表绑定的 Column 对象与一个标记为“”的列匹配时,在定位结果集行时可能会不当匹配。
引用:#2377 - [engine] [bug]
修复了“mock”策略中未调用正确 DDL 访问方法的 bug,导致“CREATE/DROP SEQUENCE”语句重复。
引用:#2384
sql
- [sql] [feature]
新的反射功能“autoload_replace”;当在 Table 上设置为 False 时,可以在不替换现有列的情况下自动加载 Table。允许构建更灵活的 Table 构建/反射链,包括它有助于将声明性与表反射结合起来。请参阅维基上的新示例。
引用:#2356 - [sql] [feature]
在 sqlalchemy.sql 命名空间中添加了“false()”和“true()”表达式构造,尽管目前还不是 all 的一部分。 - [sql] [feature]
特定方言的编译器现在对所有类型/语句编译问题引发 CompileError,而不是 InvalidRequestError 或 ArgumentError。对于 CREATE TABLE 的 DDL,将重新引发 CompileError 以包含有问题的列的表/列信息。
引用:#2361 - [sql] [bug]
改进了 add_column()的 API,如果将相同的列添加到其自己的表中,则不会引发错误,并且约束不会加倍。还有助于一些反射/声明性模式。
引用:#2356 - [sql] [bug]
修复了如果给 bindparam()传递 required=True,但语句没有任何参数,则不会引发“required”异常的问题。
参考:#2381
mysql
- [mysql] [bug]
修复了过滤掉非反射“PARTITION”指令警告的正则表达式,感谢 George Reilly
参考:#2376
sqlite
- [sqlite] [bug]
在 SQLite 中,FK 约束的“name”反映为“None”,而不是“0”或其他整数值。在任何情况下,SQLite 似乎都不支持约束命名。
参考:#2364 - [sqlite] [bug]
sql.false()和 sql.true()在 sqlite 中分别编译为 0 和 1
参考:#2368 - [sqlite] [bug]
在 SQLite 方言中,当获取表名和视图名时,删除了一个错误的“raise”,在那里逻辑是回退到一个没有“sqlite_temp_master”表的旧版本的 SQLite。
mssql
- [mssql] [bug]
调整了在 mssql.TIME 类型中使用的正则表达式,以确保仅接收值的“微秒”部分为六位数,这是 Python 的 datetime.time()所期望的。请注意,目前似乎无法使用 pyodbc 发送微秒。
参考:#2340 - [mssql] [bug]
根据报告,基于 pymssql 的“30 char”限制已被取消,因为它现在做得更好。pymssql 尚未经过充分测试,由于 DBAPI 仍在变化中,目前还不清楚此驱动程��的状态以及 SQLAlchemy 的实现应如何调整。
参考:#2347
oracle
- [oracle] [bug]
将 ORA-03135 添加到永无止境的 oracle“连接丢失”错误列表中
参考:#2388
misc
- [bug] [core]
更改了由映射器使用的 LRUCache,用于缓存 INSERT/UPDATE/DELETE 语句,以使用递增计数器而不是时间戳来跟踪条目,以提高可靠性,而不是使用 time.time(),这可能会导致某些平台上的测试失败。
参考:#2379 - [bug] [core]
在调用池连接代理的弱引用回调之前,添加了对“finalize”函数的布尔检查,以避免在应用程序退出时和 gc 在调用弱引用回调之前从模块中删除函数时发出警告,此函数为 None。
参考:#2383 - [bug] [py3k]
修复了对 util.py3k 标志的不当使用,并将其重命名为 util.py3k_warning,因为此标志仅用于检测导入限制系列“-3”标志。
参考:#2348
orm
- [orm] [feature]
在 declarative_base()中添加了“class_registry”参数。允许两个或更多声明基类共享相同的类名注册表。 - [orm] [feature]
query.filter()接受多个标准,这些标准将通过 AND 连接,即 query.filter(x==y, z>q, …) - [orm] [feature]
添加了关系加载器选项的新功能,允许“默认”加载策略。将‘*’传递给 joinedload()、lazyload()、subqueryload()或 noload()中的任何一个,这将成为用于所有关系的加载策略,除了在查询中明确指定的那些关系之外。感谢新兴的贡献者 Kent Bower 为详尽而逻辑清晰的测试套件!
引用:#2351 - [orm] [feature]
添加了新的声明式反射示例,说明了如何最好地将表反射与声明式混合使用,并使用了一些新功能。
引用:#2356 - [orm] [bug]
修复了在失败的 flush 之后建立的修改会作为随后由手动调用 rollback()自动开始的事务的一部分提交的问题。在 rollback()内部检查会话的状态,如果存在新状态,则发出警告并第二次调用 restore_snapshot(),丢弃这些更改。
引用:#2389 - [orm] [bug]
修复了从 0.7.4 开始的回归,即使用已经被超类作为“polymorphic_on”的列失败地解析了底层列的问题。
引用:#2345 - [orm] [bug]
如果 xyzload_all()与两个未连接的关系不合适地使用,则引发异常。
引用:#2370 - [orm] [bug]
修复了事件监听(event.listen(SomeClass))强制进行了完全不必要的映射器编译的错误,导致在模块导入时设置事件非常困难(竟然没有人注意到这个问题??)
引用:#2367 - [orm] [bug]
修复了 hybrid_property 在 any()、has()中无法作为关键字参数工作的错误。 - [orm] [bug]
确保所有 ORM 异常都可以被 pickle,以实现多处理兼容性。
引用:#2371 - [orm] [bug]
实现了在混合类型没有定义 fset 或 fdel 时,使用 setattr/delattr 设置或删除混合类型属性时引发标准“无法设置属性”/“无法删除属性”AttributeError。
引用:#2353 - [orm] [bug]
修复了无法正确设置未反 pickle 对象的状态的错误,在 eq()或类似方法中需要 ORM 属性访问时,这些对象需要在可变对象扩展中建立的 unpickle()事件内正确工作。
引用:#2362 - [orm] [bug]
修复了“merge”级联可能错误解释未加载属性的错误,如果使用 relationship()的 load_on_pending 标志。感谢 Kent Bower 提供的测试。
引用:#2374 - [orm]
修复了从 0.6 版本中的回归,即如果在挂起对象上需要发出非“get()”延迟子句的“load_on_pending”relationship()标志被使用,它将无法加载。
例子
- [例子] [feature]
简化了版本示例,使用了一个声明性的 mixin 和一个事件监听器,而不是一个元类+SessionExtension。
参考:#2313 - [例子] [bug]
修复了 large_collection.py 在删除表之前关闭会话的 bug。
参考:#2346
engine
- [engine] [bug]
为 StatementError、DBAPIError、列错误添加了 reduce,以便异常可被 pickle 化,例如在使用多进程时。但是,目前并非所有 DBAPI 都支持这一点,比如 psycopg2。
参考:#2371 - [engine] [bug]
当传递给 SQLite 的任何日期/时间处理器的非字符串或无效字符串时,改进了错误消息,包括 C 和 Python 版本。
参考:#2382 - [engine] [bug]
修复了一个 bug,即一个绑定到表的 Column 对象命名为“”,与标记为“”的列匹配时,可能在目标结果集行中不恰当地匹配。
参考:#2377 - [engine] [bug]
修复了“模拟”策略中的错误,其中正确的 DDL 访问方法未被调用,导致“CREATE/DROP SEQUENCE”语句被重复。
参考:#2384
sql
- [sql] [feature]
新的反射功能“autoload_replace”;当在 Table 上设置为 False 时,可以自动加载 Table 而不替换现有列。允许构建更灵活的 Table 构建/反射���,包括它有助于将声明性与表反射结合起来。请参阅维基上的新示例。
参考:#2356 - [sql] [feature]
在 sqlalchemy.sql 命名空间中添加了“false()”和“true()”表达式构造,尽管目前还不是 all 的一部分。 - [sql] [feature]
特定方言的编译器现在对所有类型/语句编译问题引发 CompileError,而不是 InvalidRequestError 或 ArgumentError。对于 CREATE TABLE 的 DDL,将重新引发 CompileError 以包含有问题的列的表/列信息。
参考:#2361 - [sql] [bug]
改进了 add_column()的 API,如果将相同的列添加到其自身的表中,不会引发错误,约束也不会重复。还有助于一些反射/声明性模式。
参考:#2356 - [sql] [bug]
修复了“required”异常不会对 bindparam()使用 required=True 时引发,如果语句根本没有给出参数。
参考:#2381
mysql
- [mysql] [bug]
修复了过滤��非反射“PARTITION”指令警告的正则表达式,感谢 George Reilly
参考:#2376
sqlite
- [sqlite] [bug]
在 SQLite 中,外键约束的“name”反映为“None”,而不是“0”或其他整数值。在任何情况下,SQLite 似乎都不支持约束命名。
参考:#2364 - [sqlite] [bug]
在 sqlite 中,sql.false()和 sql.true()分别编译为 0 和 1。
参考:#2368 - [sqlite] [bug]
在 SQLite 方言中,当获取表名和视图名时,删除了一个错误的“raise”,在那里逻辑已经设置好,以便回退到一个没有“sqlite_temp_master”表的旧版本的 SQLite。
mssql
- [mssql] [bug]
调整了 mssql.TIME 类型中使用的正则表达式,以确保仅接收“microseconds”部分的六位数字,这是 Python 的 datetime.time()所期望的。请注意,目前似乎无法使用 pyodbc 发送微秒。
参考:#2340 - [mssql] [bug]
pymssql 上的“30 char”限制已被取消,根据报告称现在的情况更好。由于 pymssql 没有经过充分测试,而且 DBAPI 仍在变化中,目前还不清楚该驱动程序的状态以及 SQLAlchemy 的实现应该如何调整。
参考:#2347
oracle
- [oracle] [bug]
将 ORA-03135 添加到永无止境的 Oracle“连接丢失”错误列表中
参考:#2388
杂项
- [bug] [core]
将用于缓存 INSERT/UPDATE/DELETE 语句的映射器的 LRUCache 更改为使用递增计数器而不是时间戳来跟踪条目,以提高可靠性,而不是使用 time.time(),后者可能会导致某些平台上的测试失败。
参考:#2379 - [bug] [core]
在调用池连接代理的弱引用回调之前,添加了对“finalize”函数的布尔检查,以避免在应用程序退出时发出警告,即当应用程序退出时,gc 已将该函数从模块中删除,而弱引用回调尚未被调用。
参考:#2383 - [bug] [py3k]
修复了 util.py3k 标志的不当使用,并将其重命名为 util.py3k_warning,因为该标志仅用于检测导入限制系列“-3”标志。
参考:#2348
0.7.4
发布日期:2011 年 12 月 09 日
orm
- [orm] [feature]
polymorphic_on 现在接受许多新类型的值:
- 未映射的独立表达式
- column_property()对象
- 任何 column_property() 的字符串名称或映射列的属性名称
- 文档包含了一个使用 case() 构造的示例,这很可能是一个常见的构造。以及部分
多态 _on 中的独立表达式会传播到单表继承的子类中,以便它们被用于 WHERE / JOIN 子句来限制行为该子类的行为,这是通常的行为。
参考:#2238,#2345 - [orm] [feature]
IdentitySet 支持-运算符,与difference()相同,处理 Session.dirty 等情况时非常方便。
参考:#2301 - [orm] [feature]
添加了 Column autoincrement 的新值称为 “ignore_fk”,可用于强制对仍然是 ForeignKeyConstraint 一部分的列进行自增。关系文档中的新示例说明了其用法。 - [orm] [bug]
修复了在从陈旧的一对多中删除时,从多对一中“弹出”值时的反向引用行为 - 该操作被跳过,因为多对一已经被更新。
参考:#2315 - [orm] [bug]
几年后重新进行此操作,对“X 是否为 Y 的父级”功能添加了更多细粒度,这在确定是否需要将“Y”的 FK “null”掉以及是否应该使用 delete-orphan 级联删除时使用。测试现在考虑到了父级的 Python 标识以及其标识键,以查看 Y 的最后已知父级是否确实为 X。如果无法做出决定,则会引发 StaleDataError。引发此错误的条件非常罕见,要求以前的父级已被垃圾回收,并且以前可能会不恰当地更新/删除已经移至新父级的记录,尽管以前可能存在一些“静默成功”的情况,但现在在面对不确定性时可能会引发。到期的 “Y” 会重置 “父级” 跟踪器,这意味着 X.remove(Y) 可能会删除 Y,即使 X 已经过期,但这与以前的行为相同;在这种情况下也建议过期 X。
参考:#2264 - [orm] [bug]
修复了在查询.get() 中对用户映射对象进行布尔上下文中的不适当评估。同时也在 0.6.9 版本中。
参考:#2310 - [orm] [bug]
对 PASSIVE_RETURN_NEVER_SET 符号添加了缺失的逗号。
参考:#2304 - [orm] [bug]
Cls.column.collate(“some collation”) 现在可以工作。同时也在 0.6.9 版本中。
参考:#1776 - [orm] [bug]
组合属性的值现在在插入或更新操作后会过期,而不是在原地重新生成。这确保了在刷新时过期的列值将首先被加载,然后再使用该值重新生成组合属性。
参考:#2309 - [orm] [bug]
修复了当在访问时加载组合值时,即使所有列值已经存在,也会触发“refresh”事件的问题,这是适当的。这修复了依赖于“load”事件确保 _parents 字典是最新的“mutable”扩展,修复了的问题。感谢 Scott Torborg 在这里提供的测试用例。
参考:#2308, #2309 - [orm] [bug]
修复了一个 bug,即当一个子类使用具体继承与新的 ConcreteBase 或 AbstractConcreteBase 时,无法将深于一级的子类应用于每个基类的“多态加载器”。
参考:#2312 - [orm] [bug]
修复了一个 bug,即当一个子类使用新的 AbstractConcreteBase 时,其子类无法在生成“base”映射器时获取正确的“base_mapper”属性,从而导致后续失败。
参考:#2312 - [orm] [bug]
修复了当针对 ORM 级别的列创建 column_property()时,在生成某些类型的 joined-inh 连接时可能会将其视为不同的实体的 bug。
参考:#2316 - [orm] [bug]
修复了当不小心将元组传递给 session.query()时引发的错误格式化。也在 0.6.9 中修复。
参考:#2297 - [orm] [bug]
对单表继承子类进行 query.join()调用现在被跟踪,并用于消除通常附加的额外的 WHERE… IN 条件,因为连接应该适应它。这允许对单表子类进行 OUTER JOIN 以产生正确的结果,并且在处理单表继承连接时将产生更少的 WHERE 条件。
参考:#2328 - [orm] [bug]
table_args 现在可以作为空元组传递,也可以作为空字典传递。感谢 Fayaz Yusuf Khan 提供的补丁。
参考:#2339 - [orm] [bug]
更新了设置 delete-orphan 而没有 delete 时的警告消息,不再提及 0.6,因为我们从未考虑将其升级为异常。理想情况下,这可能更好地作为一个异常,但无论如何都不是关键问题。
参考:#2325 - [orm] [bug]
修复了在 get_history() 中引用没有值的复合属性时的 bug;增加了对 get_history() 的覆盖范围,关于复合属性,否则只是一个用户自定义函数。
示例
- [示例] [bug]
修复了 history_meta.py 示例中的 bug,其中“unique”标志未从生成列放置到基类上的单表继承子类中移除。
引擎
- [引擎] [bug]
修复了当事务.rollback() 在事务是两阶段或保存点事务时,如果连接无效,则会在无效的连接上抛出错误的 bug。对于普通事务,如果连接无效,则 rollback() 是一个空操作,因此虽然不是 100% 清楚它是否应该是一个空操作,但至少现在接口是一致的。
参考:#2317
sql
- [sql] [特性]
现在,update() 构造可以容纳 WHERE 子句中的多个表,这将生成一个被 PostgreSQL 和 MSSQL 识别的“UPDATE…FROM” 构造。在 MySQL 上编译时,将生成“UPDATE t1, t2, …”。如果在“values”参数或生成方法中使用 Column 对象作为键,则 MySQL 还可以针对 SET 子句中的多个表进行渲染。
参考:#1944, #2166 - [sql] [特性]
添加了一个名为“python_type”的类型访问器,如果已知,返回特定 TypeEngine 实例的基本 Python 类型对象,否则引发 NotImplementedError。
参考:#77 - [sql] [bug]
相关的,对于关于 select() 中的“from”列表的更改进行了一些调整。_froms 集合不再被记忆化,因为这简化了各种用例,并消除了在表已经在表达式中使用后附加列时需要“警告”的需要 - select() 构造现在将始终生成正确的表达式。这里可能没有真正的性能损失;select() 对象几乎总是临时制作的,并且希望优化 select() 的系统将使用“compiled_cache”功能。调用 select.bind 时会减少一个命中,但绝大多数用户不应该使用“bound metadata” 😃.
参考:#2261, #2316 - [sql] [bug]
进一步调整了对修复的修正,以便生成方法在克隆后更好地工作(尽管这几乎不是一个使用案例)。特别是这允许 with_only_columns() 表现更一致。添加了额外的文档到 with_only_columns(),以澄清预期行为,这是由于结果而改变的。
参考:#2261, #2319
模式
- [模式] [特性]
添加了对远程“模式”的新支持: - [模式] [特性]
Table 上的“extend_existing”标志现在允许反射过程对已经定义的 Table 对象生效;当 autoload=True 和 extend_existing=True 都设置时,将从 Table 中反射出完整的列集,然后将覆盖已经存在的列,而不是不进行任何操作。然而,直接在 autoload 运行中存在的列将像往常一样使用。
参考:#1410 - [模式] [bug]
修复了 TypeDecorator 在使用“切换”类型的 TypeDecorator(如 CHAR/UUID 类型)时返回过时值的 bug。 - [模式] [bug]
修复了 Inspector.get_table_names 中“order_by=‘foreign_key’”选项未正确实现排序的 bug,替换为现有的排序算法 - [模式] [bug]
如果存在列级别的 CHECK 约束的“name”,则现在在 CREATE TABLE 语句中使用“CONSTRAINT CHECK ”来呈现。
参考:#2305 - [模式]
MetaData() 接受“schema”和“quote_schema”参数,这些参数将应用于同名参数的 Table 或 Sequence,如果这些参数保持默认值None。 - [模式]
Sequence 接受“quote_schema”参数 - [模式]
对于 Table,如果 schema 参数明确为“None”,则 tometadata() 方法将使用传入 MetaData 的“schema” 创建新 Table - [模式]
添加了 CreateSchema 和 DropSchema DDL 构造 - 这些仅接受模式的字符串名称和一个“quote”标志。 - [模式]
当使用默认的“schema”与 MetaData 时,ForeignKey 在定位远程表时也会假定“default” schema。这允许将 MetaData 上的“schema”参数应用于任何一组 Table 对象,否则这些对象没有“schema”。 - [模式]
在 dialect 上实现了一个“has_schema”方法,但目前只在 PostgreSQL 上有效。感谢 Manlio Perillo。
参考:#1679
postgresql
- [postgresql] [feature]
添加了 create_type 构造参数到 pg.ENUM。当为 False 时,不会执行 CREATE/DROP 或检查类型作为表创建/删除事件的一部分;只有直接调用 create()/drop() 方法时才会执行此操作。有助于 Alembic 的“离线”脚本。 - [postgresql] [bug]
PostgreSQL dialect 缓存了特定名称的 ENUM 在创建/删除序列期间已处理。这使得在不需要任何“checkfirst”调用的情况下可以正常工作,并且在打开“checkfirst”时只需要检查 ENUM 一次。
参考:#2311
mysql
- [mysql] [bug]
Unicode 调整使最新的 pymysql(0.4 之后)在 Python 2 上通过了 100% 的测试。
mssql
- [mssql] [feature]
解除了 SQL Server 对 SAVEPOINT 的限制。所有测试都通过了,但不清楚是否存在更深层次的问题。
参考:#822 - [mssql] [错误]
修复了在 MSSQL 上未正确实现的 with_hint() 功能 - 通常用于“WITH (NOLOCK)”提示(你不应该使用它!改用快照隔离 😃
参考:#2336 - [mssql] [错误]
为 _need_decimal_fix 选项使用新的 pyodbc 版本检测。
参考:#2318 - [mssql] [错误]
不要在 SQL Server 2000 上将“表名”转换为 NVARCHAR。仍然不太清楚在这里完全使 PyODBC 与 FreeTDS 0.91 兼容需要哪些咒语。
参考:#2343 - [mssql] [错误]
解码在检索索引名称列表和这些索引中的列名称时的传入值。
参考:#2269
杂项
- [功能] [扩展]
在混合文档中添加了一个“转换器”的示例 - 一个混合,它返回一个查询转换的可调用对象与自定义比较器结合使用。在 Query 上使用的新方法称为 with_transformation()。这里的用例相当实验性,但只需要在 Query 中添加一行代码。 - [错误] [pyodbc]
基于 pyodbc 的方言现在可以准确解析 pyodbc 字符串,包括“py3-3.0.1-beta4”等宝藏。
参考:#2318 - [错误] [扩展]
当没有“默认”编译处理程序时,@compiles 装饰器引发一条信息丰富的错误消息,而不是 KeyError。
orm
- [orm] [功能]
polymorphic_on 现在接受许多新种类的值:
- 否则不被映射的独立表达式
- column_property() 对象
- 任何 column_property() 的字符串名称或映射 Column 的属性名称
- 文档包括一个使用 case() 构造的示例,这可能是一个常见的构造用法。和部分
polymorphic_on 中的独立表达式传播到单表继承子类,因此它们被用于 WHERE /JOIN 子句以将行限制为该子类,这是通常的行为。
参考:#2238,#2345 - [orm] [功能]
IdentitySet 支持 - 运算符与 difference() 相同,处理 Session.dirty 等时非常方便。
参考:#2301 - [orm] [功能]
添加了称为“ignore_fk”的 Column 自增值的新值,可用于强制在仍然属于 ForeignKeyConstraint 的列上自增。关系文档中的新示例说明了其用法。 - [orm] [错误]
修复了当从过时的一对多中删除时从多对一中“弹出”值的反向引用行为 - 该操作被跳过,因为多对一已经被更新。
参考:#2315 - [orm] [错误]
几年后,对“X 是否是 Y 的父级”功能增加了更多细粒度的控制,这在确定“Y”的外键是否也需要“被置空”以及是否应该使用删除孤立级联时使用。测试现在考虑了父级的 Python 标识以及其标识键,以查看 Y 的上一个已知父级是否绝对是 X。如果无法做出决定,则会引发 StaleDataError。引发此错误的条件相当罕见,要求以前的父级已被垃圾收集,并且以前可能会不适当地更新/删除已经移至新父级的记录,尽管以前可能存在一些“静默成功”的情况,但现在在面对模糊性时将会引发。使“Y”过期会重置“父”跟踪器,这意味着 X.remove(Y)然后可能会删除 Y,即使 X 已过期,但这与以前的行为相同;建议在这种情况下也使 X 过期。
引用:#2264 - [orm] [bug]
修复了在 query.get()中不适当评估用户映射对象的布尔上下文的错误。还在 0.6.9 中。
引用:#2310 - [orm] [bug]
添加了缺少的逗号到 PASSIVE_RETURN_NEVER_SET 符号
引用:#2304 - [orm] [bug]
Cls.column.collate(“some collation”)现在可以工作。也在 0.6.9 中。
引用:#1776 - [orm] [bug]
现在,复合属性的值在插入或更新操作后会过期,而不是在原地重新生成。这确保了在刷新时过期的列值会首先被加载,然后才会使用该值重新生成复合值。
引用:#2309 - [orm] [bug]
修复了当访问时加载复合值时也会发出“刷新”事件的问题,即使所有列值已经存在,这是合适的。这修复了依赖于“load”事件来确保 _parents 字典是最新的“mutable”扩展,修复。感谢 Scott Torborg 提供的测试用例。
引用:#2308,#2309 - [orm] [bug]
修复了一个错误,即使用新的 ConcreteBase 或 AbstractConcreteBase 与具体继承一起使用的子类的子类将无法将更深层次的子类应用于每个基类的“多态加载器”。
引用:#2312 - [orm] [bug]
修复了使用新的 AbstractConcreteBase 的子类的子类在生成“基”映射器时无法获得正确的“base_mapper”属性的错误,从而导致后来的失败。
引用:#2312 - [orm] [bug]
修复了一个错误,即当针对 ORM 级别的列创建 column_property() 时,在生成某些类型的联合继承联接时,可能会将其视为单独的实体。
参考:#2316 - [orm] [错误]
修复了当元组被错误地传递给 session.query() 时引发的错误格式化问题。也适用于 0.6.9 版本。
参考:#2297 - [orm] [错误]
对单表继承子类的 query.join() 现在被跟踪,并且用于消除通常在单表继承时附加的额外 WHERE… IN 准则,因为联接应该适应它。这允许对单表子类进行 OUTER JOIN 以产生正确的结果,并且在处理单表继承联接时通常会生成更少的 WHERE 准则。
参考:#2328 - [orm] [错误]
table_args 现在可以作为空元组和空字典传递。感谢 Fayaz Yusuf Khan 提供的修补程序。
参考:#2339 - [orm] [错误]
更新了设置 delete-orphan 但没有删除时的警告消息,不再提到 0.6 版本,因为我们从未考虑过将其升级为异常。理想情况下,这可能更好地作为一个异常,但无论如何都不是关键。
参考:#2325 - [orm] [错误]
在 get_history() 中修复了引用没有值的复合属性时的错误;为 get_history() 添加了关于否则只是一个用户自定义函数的复合的覆盖。
示例
- [示例] [错误]
修复了 history_meta.py 示例中的错误,其中“unique”标志未从生成要放在基础上的列的单表继承子类中删除。
引擎
- [引擎] [错误]
修复了当事务.rollback()在事务是两阶段或保存点事务时,如果连接无效,则会抛出错误的错误。对于普通事务,如果连接无效,rollback() 是一个空操作,所以虽然不太清楚它是否应该是一个空操作,但至少现在接口是一致的。
参考:#2317
sql
- [sql] [功能]
update() 构造现在可以在 WHERE 子句中容纳多个表格,这将生成一个被 PostgreSQL 和 MSSQL 识别的“UPDATE…FROM”构造。在 MySQL 上编译时,将生成“UPDATE t1, t2, …”。如果在“values”参数或生成方法中使用 Column 对象作为键,则 MySQL 还可以针对多个表格在 SET 子句中渲染。
参考:#1944, #2166 - [sql] [功能]
添加了名为“python_type”的类型访问器,如果已知,则返回特定 TypeEngine 实例的基本 Python 类型对象,否则引发 NotImplementedError。
参考:#77 - [sql] [错误]
关于,对 select()的“from”列表的更改进行了一些调整。_froms 集合不再被记忆,因为这简化了各种用例,并消除了在表达式中使用列后,如果在表达式中使用列后再将其附加到表中,则无需“警告”的需要 - select()构造现在将始终生成正确的表达式。这里可能没有真实的性能损失;select()对象几乎总是临时制作的,并且希望优化 select()的重用的系统将使用“compiled_cache”功能。调用 select.bind 时会减少一个命中,但绝大多数用户不应该使用“bound metadata”:)。
参考:#2261, #2316 - [sql] [错误]
进一步调整了修复,以便生成方法在克隆后更好地工作(尽管这几乎是一个非使用情况)。特别是这允许 with_only_columns()更一致地行为。添加了额外的文档到 with_only_columns()以澄清预期行为,这是由于结果而改变的。
参考:#2261, #2319
模式
- [模式] [功能]
增加了对远程“模式”的新支持: - [模式] [功能]
Table 上的“extend_existing”标志现在允许反射过程对已经定义的 Table 对象生效;当 autoload=True 和 extend_existing=True 都设置时,将从 Table 中反射出完整的列集,然后覆盖已经存在的列,而不是不发生任何活动。然而,直接在 autoload 运行中存在的列将像往常一样使用。
参考:#1410 - [模式] [错误]
修复了 TypeDecorator 在使用“切换”类型的 TypeDecorator 时会返回过时值的错误,比如 CHAR/UUID 类型。 - [模式] [错误]
修复了 Inspector.get_table_names 中“order_by=‘foreign_key’”选项未正确实现排序的错误,替换为现有的排序算法 - [模式] [错误]
如果存在列级别的 CHECK 约束的“名称”,则现在在 CREATE TABLE 语句中使用“CONSTRAINT CHECK ”来呈现。
参考:#2305 - [模式]
MetaData()接受“模式”和“quote_schema”参数,这些参数将应用于 Table 或 Sequence 的同名参数,这些参数保持默认值为None。 - [模式]
Sequence 接受“quote_schema”参数 - [模式]
对于 Table,如果 schema 参数明确为“None”,tometadata()将使用传入的 MetaData 的“模式”为新 Table。 - [模式]
添加了 CreateSchema 和 DropSchema DDL 构造 - 这些仅接受模式的字符串名称和“quote”标志。 - [schema]
当使用默认的“schema”与 MetaData 时,ForeignKey 在定位远程表时也会假定“default”模式。这允许将 MetaData 上的“schema”参数应用于任何一组否则没有“schema”的 Table 对象。 - [schema]
在方言上实现了一个“has_schema”方法,但目前只在 PostgreSQL 上有效。感谢 Manlio Perillo。
参考:#1679
postgresql
- [postgresql] [feature]
向 pg.ENUM 添加了 create_type 构造函数参数。当为 False 时,在表创建/删除事件中不会执行 CREATE/DROP 或检查类型;只有直接调用 create()/drop()方法才会执行此操作。有助于 Alembic 的“离线”脚本。 - [postgresql] [bug]
PostgreSQL 方言在创建/删除序列期间缓存了特定名称的 ENUM。这允许创建/删除序列在没有任何“checkfirst”调用的情况下工作,并且也意味着在打开“checkfirst”时只需要检查 ENUM 一次。
参考:#2311
mysql
- [mysql] [bug]
Unicode 调整允许最新的 pymysql(0.4 之后)在 Python 2 上通过 100%。
mssql
- [mssql] [feature]
解除了对 SQL Server 的 SAVEPOINT 的限制。所有测试都通过了,但不清楚是否存在更深层次的问题。
参考:#822 - [mssql] [bug]
修复了在 MSSQL 上未��确实现的 with_hint()功能 - 通常用于“WITH (NOLOCK)”提示(你不应该使用的!改用快照隔离 😃)
参考:#2336 - [mssql] [bug]
使用新的 pyodbc 版本检测来确定 _need_decimal_fix 选项。
参考:#2318 - [mssql] [bug]
不要在 SQL Server 2000 上将“表名”转换为 NVARCHAR。然而,对于如何使 PyODBC 与 FreeTDS 0.91 完全配合,仍然大多数是未知的。
参考:#2343 - [mssql] [bug]
在检索索引名称列表和这些索引中列的名称时,解码传入的值。
参考:#2269
杂项
- [feature] [ext]
在混合文档中添加了一个“transformer”的示例 - 一个返回查询转换可调用对象的混合,结合自定义比较器。使用 Query 上的新方法 with_transformation()。这里的用例相当实验性,但只需要向 Query 添加一行代码。 - [bug] [pyodbc]
基于 pyodbc 的方言现在准确解析 pyodbc 字符串,包括诸如“py3-3.0.1-beta4”之类的珍品。
参考:#2318 - [bug] [ext]
当没有“default”编译处理程序时,@compiles 装饰器会引发信息性错误消息,而不是 KeyError。
SqlAlchemy 2.0 中文文档(六十六)(4)https://developer.aliyun.com/article/1560810