SqlAlchemy 2.0 中文文档(六十六)(5)

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: SqlAlchemy 2.0 中文文档(六十六)

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


0.7.0

发布日期:2011 年 5 月 20 日星期五

orm

  • [orm]
    修复了在 0.7b4 中引入的回归,即 query.options(someoption(“nonexistent name”))将无法引发错误。还为尝试基于基于列的元素构建选项的情况添加了额外的错误捕获,进一步修正了一些错误消息
    参考:#2069
  • [orm]
    query.count()发出“count(*)”而不是“count(1)”。
    参考:#2162
  • [orm]
    当使用 from_self(),union()或其他“从自身选择”的操作时,对 Query 子句适应进行微调,以便对添加到 filter(),order_by()等中的普通 SQL 表达式元素进行适应,这些元素存在于嵌套的“从自身”查询中,以与 ORM 表达式元素相同的方式进行适应,因为否则这些元素不容易访问。
    参考:#2155
  • [orm]
    修复了一个 bug,即“自引用”关系的确定会失败,没有解决方案,涉及到自身的 joined-inh 子类,或者与没有在 join 条件中的子子类的子类相关联。也适用于 0.6.8 版本。
    参考:#2149
  • [orm]
    mapper()将在确定父类和子类之间的继承条件时忽略未配置的与不相关表的外键,但对于关于继承表的未解析列和表名,将像往常一样引发异常。这是对先前应用于声明性的行为的增强泛化。0.6.8 具有更保守的版本,不会从根本上改变确定连接条件的方式。
    参考:#2153
  • [orm]
    在给定实体不是单个完整类实体或映射器(即列)时调用 query.get()是一个错误。这是 0.6.8 中的一个弃用警告。
    参考:#2144
  • [orm]
    修复了在某些情况下可能发生的潜在 KeyError,部分
    参考:#2148
  • [orm]
    添加了 Query.with_session()方法,将 Query 切换到使用不同的会话。
  • [orm]
    水平分片查询应该根据每个连接使用执行选项
    参考:#2131
  • [orm]
    非主 mapper 将继承主 mapper 的 _identity_class。这样,对于通常处于继承映射中的类建立的非主 mapper,将产生与主 mapper 兼容的 identity-map 结果(也在 0.6.8 中)
    参考:#2151
  • [orm]
    修复了“无法为目标列‘q’执行 syncrule;mapper ‘X’ 不映射此列”的错误消息,以引用正确的 mapper。也在 0.6.8 中。
    参考:#2163
  • [orm]
    polymorphic_union() 得到一个 “cast_nulls” 选项,当它渲染标记为 NULL 的列时禁用 CAST 的使用。
    参考:#1502
  • [orm]
    polymorphic_union() 将列按照它们在原始表中的顺序渲染,根据它们在出现的多态联合列表中的第一个表/可选择的表来排序。(除非你传递了一个 OrderedDict,否则这本身就是一个无序映射)。
  • [orm]
    修复了一个错误,即如果将 mapper 映射到一个匿名别名,则在使用日志记录时会失败,因为别名中的 % 符号未经转义。也在 0.6.8 中。
    参考:#2171

示例

  • [示例]
    删除了古老的“多态关联”示例,并用使用声明性 mixin、“通用关联”更新的示例集进行替换。每个示例都提供了一种替代的表布局。

sql

  • [sql]
    修复了一个错误,即将 select() 的一个标签嵌套到另一个标签中会产生错误的导出列。除其他事项外,这会破坏对另一个 column_property() 的 ORM column_property() 映射。也在 0.6.8 中
    参考:#2167
  • [sql]
    更改了确定连接条件的处理方式,使得外键错误仅在两个给定的表之间考虑。也就是说,t1.join(t2) 将报告涉及‘t1’或‘t2’的 FK 错误,但任何涉及‘t3’的内容都将被跳过。这会影响 join(),以及 ORM 关系和继承条件逻辑。
  • [sql]
    在执行过程中对错误处理进行了一些改进,以确保在出现非常不寻常的 DBAPI 错误时自动关闭的连接确实关闭。
  • [sql]
    metadata.reflect() 和 reflection.Inspector() 对内部获取的连接有一些依赖关系,这些依赖关系已经被修复。
  • [sql]
    添加了一个显式检查,当列 .name 被赋予空字符串时
    参考:#2140
  • [sql]
    修复了一个错误,即如果将 FetchedValue 传递给列 server_onupdate,则其父“列”将不会被赋值,为所有列默认赋值模式添加了测试覆盖。也在 0.6.8 中。
    参考:#2147

postgresql

  • [postgresql]
    修复了在 psycopg2 方言中解析 psycopg2_version 的问题。
  • [postgresql]
    修复了影响 PG 9 的 bug,其中反射索引会失败,如果针对更改名称的列。也在 0.6.8 中。
    参考:#2141

mssql

  • [mssql]
    修复了 MSSQL 方言中的 bug,其中应用于模式限定表的别名会泄漏到封闭的 select 语句中。也在 0.6.8 中。
    参考:#2169

杂项

  • [no_tags]
    本节记录了从 0.7b4 到 0.7.0 的更改。有关 SQLAlchemy 0.7 中的新功能概述,请参见docs.sqlalchemy.org/en/latest/changelog/migration_07.html
  • [documentation]
    从 ext.mutable 文档中删除了对“collections.MutableMapping” abc 的使用,因为它被错误地使用,并且在任何情况下都使示例更难理解。
    参考:#2152
  • [ext]
    修复了 sqlalchemy.ext.mutable 扩展中的 bug,其中 None 没有得到适当处理,替换事件也没有得到适当处理。
    参考:#2143

orm

  • [orm]
    修复了在 0.7b4 中引入的回归(!),在那里查询选项(someoption(“不存在的名称”))将无法引发错误。还为尝试基于基于列的元素构建选项的情况添加了额外的错误捕获,进一步修复了一些定制的错误消息
    参考:#2069
  • [orm]
    query.count() 发出“count(*)”而不是“count(1)”。
    参考:#2162
  • [orm]
    在  from_self(),union()或其他“从自己选择”的操作时,对 Query 子句适应进行微调,以便在嵌套的“from  myself”查询中添加到 filter(),order_by()等中的纯 SQL 表达式元素将以与 ORM  表达式元素相同的方式进行适应,因为否则这些元素不容易访问。
    参考:#2155
  • [orm]
    修复了一个 bug,当判断“自引用”关系失败时,没有解决方法,导致与自身相关的 joined-inh 子类或与没有在子子类中的列在连接条件中的子类相关的 joined-inh 子类。也在 0.6.8 中。
    参考:#2149
  • [orm]
    mapper()将在确定父类和子类之间的继承条件时忽略与无关表的非配置外键,但对于未解析的列和表名,关于继承表的继承条件将像往常一样引发异常。这是对以前已应用于声明的行为的增强泛化。0.6.8 有一个更保守的版本,不会根本改变如何确定连接条件。
    参考:#2153
  • [orm]
    在给定实体不是单一的、完整的类实体或映射器(即一个列)时调用 query.get()是一个错误。这在 0.6.8 中是一个废弃的警告。
    参考:#2144
  • [orm]
    修复了在某些情况下可能会发生的潜在的 KeyError,该错误可能会在标识映射中发生,这是的一部分
    参考:#2148
  • [orm]
    添加了 Query.with_session()方法,将 Query 切换到使用不同的会话。
  • [orm]
    水平分片查询应该使用每个连接的执行选项,如
    参考:#2131
  • [orm]
    非主要映射器将继承主映射器的 _identity_class。这样,对于通常处于继承映射中的类进行非主要建立的情况,将产生与主映射器的标识映射兼容的结果(也在 0.6.8 中)。
    参考:#2151
  • [orm]
    修复了“无法为目标列‘q’执行 syncrule;映射‘X’未映射此列”的错误消息,以引用正确的映射器。也在 0.6.8 中。
    参考:#2163
  • [orm]
    polymorphic_union()获得了一个“cast_nulls”选项,当它呈现标记的 NULL 列时,禁用了 CAST 的使用。
    参考:#1502
  • [orm]
    polymorphic_union()以它们在原始表中的顺序呈现列,根据它们在多态联合列表中首次出现的第一个表/可选择表。 (除非您传递了一个 OrderedDict,否则它本身是一个无序映射)。
  • [orm]
    修复了一个 bug,即如果使用了日志记录,则映射到匿名别名的映射器将失败,因为别名名称中存在未转义的%符号。同样也在 0.6.8 中。
    参考:#2171

例子

  • [examples]
    删除了古老的“多态关联”示例,并用使用声明性混合项、“通用关联”替换了一组更新后的示例。每个示例呈现了一种替代的表布局。

sql

  • [sql]
    修复了一个 bug,即将 select()的标签嵌套在另一个标签中时,将产生不正确的导出列。除其他外,这会破坏针对另一个列属性()映射的 ORM 列属性()映射。也在 0.6.8 中
    参考:#2167
  • [sql]
    更改了决定连接条件的处理方式,使外键错误仅在两个给定的表之间考虑。也就是说,t1.join(t2)将报告涉及‘t1’或‘t2’的 FK 错误,但任何涉及‘t3’的都将被跳过。这影响 join(),以及 ORM 关系和继承条件逻辑。
  • [sql]
    在 execute 过程内部的错误处理中进行了一些改进,以确保在发生非常不寻常的 DBAPI 错误时真正关闭自动关闭的连接。
  • [sql]
    metadata.reflect() 和 reflection.Inspector() 在调用 GC 关闭内部获取的连接时存在一些依赖关系,已修复此问题。
  • [sql]
    添加了对 Column .name 被分配为空字符串时的显式检查
    参考:#2140
  • [sql]
    修复了一个错误,即如果将 FetchedValue 传递给列 server_onupdate,则其父“列”将不会被分配,为所有列默认分配模式增加了测试覆盖。同时也在 0.6.8 版中进行了修复。
    参考:#2147

postgresql

  • [postgresql]
    修复了 psycopg2 方言中 psycopg2_version 解析的错误。
  • [postgresql]
    修复了影响 PG 9 的错误,即索引反射将失败,如果针对更改了名称的列进行。同时也在 0.6.8 版中进行了修复。
    参考:#2141

mssql

  • [mssql]
    修复了 MSSQL 方言中的错误,其中应用于带模式限定的表的别名会泄漏到封闭的 select 语句中。同时也在 0.6.8 版中进行了修复。
    参考:#2169

杂项

  • [无标签]
    此部分记录了从 0.7b4 到 0.7.0 的更改。有关 SQLAlchemy 0.7 中的新功能概述,请参阅 docs.sqlalchemy.org/en/latest/changelog/migration_07.html
  • [文档]
    从 ext.mutable 文档中删除了对“collections.MutableMapping” abc 的使用,因为它使用不正确,而且在任何情况下都使示例更难理解。
    参考:#2152
  • [ext]
    在 sqlalchemy.ext.mutable 扩展中修复了一些错误,其中 None 没有得到适当处理,替换事件也没有得到适当处理。
    参考:#2143

0.7.0b4

发布日期:2011 年 4 月 17 日

通用

  • [通用]
    更改了 CHANGES,即本文件的格式。格式更改已应用于 0.7 版本。
  • [通用]
    现在,“-declarative” 更改将直接列在“-orm”部分下面,因为这些更改是密切相关的。
  • [通用]
    0.5 系列的更改已经移至文件 CHANGES_PRE_06,该文件替代了 CHANGES_PRE_05。
  • [通用]
    0.6.7  及其后续版本在 0.6 系列中现在只在 0.6 分支中的 CHANGES 文件中列出。在 0.7 CHANGES 文件中(即本文件),所有  0.6 的更改都以行内方式列在它们被应用的 0.7 部分中(因为所有 0.6 更改也都在 0.7 中)。这里适用于 0.6  版本的更改被记录,以及如果存在任何实现/行为上的差异则予以注明。

orm

  • [orm]
    当调用  query.update()、query.delete()  时,对“evaluate”和“fetch”评估进行了一些修复。在所有情况下,记录的检索都在自动提交之后进行,并且在发出更新/删除之前进行,以防止存在未提交的数据以及在评估期间失败的过期对象。
    参考:#2122
  • [orm]
    重新修订了当尝试刷新一个不是对超类型进行多态的子类时引发的异常。
    参考:#2063
  • [orm]
    当查询选项无法找到目标实体时,仍需进行更多的措辞调整。解释路径必须来自一个根实体。
  • [orm]
    关于反向引用的状态处理进行了一些修复,通常在 autoflush=False 时,反向引用的集合不会正确处理没有净变化的添加/删除。感谢 Richard Murri 提供的测试用例和补丁。(也在 0.6.7 中)。
    参考:#2123
  • [orm]
    在 UOW 内添加了检查,以检测在主键值中包含 NULL 时被要求进行 UPDATE 或 DELETE 的异常情况。
    参考:#2127
  • [orm]
    对属性历史进行了一些改进。更多的变化可能会在 0.8 版本中进行,但目前历史已经被修改,使得标量历史不会在非存在值时填充为 None。这样稍微更好地区分了 None 设置和实际没有变化的能力,也会产生影响。
    参考:#2127
  • [orm]
    如果使用 from_self(),则“having��子句将从内部复制到外部查询;特别是这将破坏 0.7 风格的 count()查询。(也在 0.6.7 中)
    参考:#2130
  • [orm]
    Query.execution_options()方法现在将这些选项传递给 Connection 而不是 SELECT 语句,以便可以使用所有可用选项,包括隔离级别和编译缓存。
    参考:#2131

engine

  • [engine]
    C 扩展现在在 CPython 2.x 上默认启用,如果编译失败,则回退到纯 Python。
    参考:#2129

sql

  • [sql]
    “compiled_cache”执行选项现在在传递给 SELECT 语句而不是 Connection 时会引发错误。之前它完全被忽略。我们可能会考虑在某个时候使这个选项在每个语句级别上工作。
    参考:#2131
  • [sql]
    恢复了基本 TypeEngine 类上的“catchall”构造函数,并附带弃用警告。这样,像 Integer(11)这样的代码仍然可以成功。
  • [sql]
    修复了回归,即从反序列化中返回的 MetaData()没有跟踪现在跟踪的新内容,即 Sequence 对象的集合,模式名称列表。
    参考:#2104
  • [sql]
    select()中的 limit/offset 关键字以及传递给 select.limit()/offset()的值将被强制转换为整数。(也在 0.6.7 中)
    参考资料:#2116
  • [sql]
    修复了一个 bug,即从 over() 子句中收集的“from”子句将是一个 itertools.chain() 而不是一个列表,当与其他子句组合时会导致“can only concatenate list” TypeError。
  • [sql]
    修复了在 over() 子句中不正确使用“,”的问题,该问题被放置在“partition”和“order by”子句之间。
    参考资料:#2134
  • [sql]
    PrimaryKeyConstraint 的 before/after attach 事件现在可以正常使用,为所有约束类型添加了 before/after 事件的测试。
    参考资料:#2105
  • [sql]
    添加了显式的 true()/false() 构造到表达式库 - 强制规则将“False”/“True”拦截到这些构造中。在 0.6 版本中,这些构造通常直接转换为字符串,但在 0.7 版本中不再接受。
    参考资料:#2117

schema

  • [schema]
    Table 上的 ‘useexisting’  标志已被一对新标志 ‘keep_existing’ 和 ‘extend_existing’ 所取代。‘extend_existing’ 等效于  ‘useexisting’ - 返回现有的 Table,并添加附加的构造元素。使用 ‘keep_existing’,返回现有的  Table,但不添加附加的构造元素 - 这些元素仅在新创建 Table 时应用。
    参考资料:#2109

postgresql

  • [postgresql]
    支持 Python 3 的 Psycopg2 现已支持。
  • [postgresql]
    修复了使用 pg8000 时对精度数字的支持。
    参考资料:#2132

sqlite

  • [sqlite]
    修复了如果作为“REFERENCES ”创建的外键的反射没有列名,则会失败的 bug。 (也在 0.6.7 版本中)
    参考资料:#2115

oracle

  • [oracle]
    当与 cx_oracle 通信时,对于需要为列本身或名称生成的绑定参数,例如具有特殊字符、下划线、非 ASCII 字符的名称,现在正确地将绑定参数键翻译为列名。 (也在 0.6.7 版本中)
    参考资料:#2100
  • [oracle]
    Oracle 方言添加了 use_binds_for_limits=False create_engine() 标志,将在行内呈现 LIMIT/OFFSET 值,而不是作为绑定,据报道修改了 Oracle 使用的执行计划。 (也在 0.6.7 版本中)
    参考资料:#2116

杂项

  • [types]
    REAL 已添加到核心类型中。由 PostgreSQL、SQL Server、MySQL、SQLite 支持。请注意,SQL Server 和 MySQL 版本添加了额外的参数,仍然可以从这些方言中获取。
    参考资料:#2081
  • [types]
    添加了 @event.listens_for() 装饰器,给定目标 + 事件名称,将装饰函数应用为监听器。
    参考资料:#2106
  • [pool]
    AssertionPool 现在存储了指示当前检出连接获取位置的回溯信息;在第二次并发检出时,此回溯信息将在引发的断言中报告;感谢 Gunnlaugur Briem
    参考:#2103
  • [池]
    “pool.manage”功能不再使用 pickle 来为每个池的参数进行哈希。
  • [文档]
    记录了 SQLite 的 DATE/TIME/DATETIME 类型。(也在 0.6.7 中)
    参考:#2029
  • [文档]
    修复可变扩展文档,显示正确的类型关联方法。
    参考:#2118

通用

  • [通用]
    对 CHANGES 文件的格式进行更改。这些格式更改已应用于 0.7 版本发布。
  • [通用]
    “-declarative”更改现在将直接列在“-orm”部分下面,因为它们密切相关。
  • [通用]
    0.5 系列的更改已移至 CHANGES_PRE_06 文件,取代了 CHANGES_PRE_05 文件。
  • [通用]
    0.6.7  及其后续版本的更改现在仅在 0.6 分支内的 CHANGES 文件中列出。在 0.7 CHANGES 文件(即本文件)中,所有 0.6  更改都内联列在它们也应用的 0.7 部分中(因为所有 0.6 更改也在 0.7 中)。这里适用于 0.6  版本的更改被记录,如果存在实现/行为上的任何差异也会被注明。

orm

  • [orm]
    当调用  query.update(),query.delete()时,对“evaluate”和“fetch”评估进行一些修复。在所有情况下,记录的检索都是在自动刷新之后进行的,并且在发出  update/delete 之前进行,以防止未刷新的数据以及在评估过程中失败的过期对象。
    参考:#2122
  • [orm]
    重新措辞了当尝试刷新不是对超类型进行多态处理的子类时引发的异常。
    参考:#2063
  • [orm]
    当查询选项无法找到目标实体时,进一步调整措辞。解释路径必须从根实体之一开始。
  • [orm]
    关于反向引用(backrefs)的状态处理进行了一些修复,通常在 autoflush=False 时,当反向引用集合未正确处理没有净变化的 add/remove 时。感谢 Richard Murri 提供的测试用例+补丁。(也在 0.6.7 中)。
    参考:#2123
  • [orm]
    在 UOW 内添加检查,以检测在主键值中包含 NULL 的情况下被要求进行 UPDATE 或 DELETE 的异常条件。
    参考:#2127
  • [orm]
    对属性历史进行了一些细化。更多的更改可能在 0.8 中进行,但目前历史已被修改,使得标量历史不再具有为不存在的值填充 None 的“副作用”。这样可以稍微更好地区分 None 集和没有实际更改的能力,也会受到影响。
    参考:#2127
  • [ORM]
    如果使用 from_self(),则“having”子句将从内部复制到外部查询;特别是这将破坏 0.7 风格的 count()查询。(也适用于 0.6.7)
    参考:#2130
  • [ORM]
    Query.execution_options()方法现在将这些选项传递给 Connection 而不是 SELECT 语句,因此可以使用所有可用选项,包括隔离级别和编译缓存。
    参考:#2131

引擎

  • [引擎]
    C 扩展现在在 CPython 2.x 上默认启用,如果编译失败,则回退到纯 Python。
    参考:#2129

SQL

  • [SQL]
    “compiled_cache”执行选项现在在传递给 SELECT 语句而不是 Connection 时会引发错误。以前它完全被忽略。我们可能会考虑在某个时候使此选项在每个语句级别上工作。
    参考:#2131
  • [SQL]
    恢复了基本 TypeEngine 类上的“catchall”构造函数,并附带弃用警告。这样,像 Integer(11)这样的代码仍然可以成功。
  • [SQL]
    修复了从反序列化中返回的 MetaData()未能跟踪现在跟踪的新内容的回归,即 Sequence 对象的集合,模式名称列表。
    参考:#2104
  • [SQL]
    传递给 select()的 limit/offset 关键字以及传递给 select.limit()/offset()的值将被强制转换为整数。(也适��于 0.6.7)
    参考:#2116
  • [SQL]
    修复了一个 bug,即从 over()子句中收集的“from”子句将是一个 itertools.chain()而不是一个列表,导致与其他子句组合时出现“can only concatenate list” TypeError。
  • [SQL]
    修复了在 over()子句中不正确使用“,”被放置在“partition”和“order by”子句之间的问题。
    参考:#2134
  • [SQL]
    在 PrimaryKeyConstraint 的前/后附加事件现在起作用,对所有约束类型的前/后事件进行了测试。
    参考:#2105
  • [SQL]
    在表达式库中添加了显式的 true()/false()构造 - 强制规则将“False”/“True”拦截到这些构造中。在 0.6 中,这些构造通常直接转换为字符串,而在 0.7 中不再接受。
    参考:#2117

模式

  • [模式]
    Table  上的‘useexisting’标志已被新的一对标志‘keep_existing’和‘extend_existing’取代。‘extend_existing’等同于‘useexisting’  - 返回现有的 Table,并添加额外的构造元素。使用‘keep_existing’时,返回现有的 Table,但不添加额外的构造元素 -  这些元素仅在新创建 Table 时应用。
    参考:#2109

postgresql

  • [postgresql]
    现在支持 Python 3 的 Psycopg2。
  • [postgresql]
    修复了在使用 pg8000 时支持精度数字的问题。
    参考:#2132

sqlite

  • [sqlite]
    修复了一个 bug,即反射创建的外键为“REFERENCES ”而没有列名时会失败。(也适用于 0.6.7 版本)
    参考:#2115

oracle

  • [oracle]
    使用需要为列本身或名称生成的绑定参数引号的列名,例如具有特殊字符、下划线、非 ASCII 字符的名称,现在在与 cx_oracle 通信���正确地转换绑定参数键。(也适用于 0.6.7 版本)
    参考:#2100
  • [oracle]
    Oracle 方言添加了 use_binds_for_limits=False create_engine()标志,将在行内呈现 LIMIT/OFFSET 值,而不是作为绑定,据报道会修改 Oracle 使用的执行计划。(也适用于 0.6.7 版本)
    参考:#2116

杂项

  • [类型]
    REAL 已添加到核心类型中。由 PostgreSQL、SQL Server、MySQL、SQLite 支持。请注意,SQL Server 和 MySQL 版本,添加了额外的参数,仍然可以从这些方言中使用。
    参考:#2081
  • [类型]
    添加了@event.listens_for()装饰器,给定目标+事件名称,将装饰的函数应用为监听器。
    参考:#2106
  • [池]
    AssertionPool 现在存储了当前检出连接获取的轨迹,这个轨迹在第二次并发检出时引发的断言中报告;感谢 Gunnlaugur Briem
    参考:#2103
  • [池]
    “pool.manage”功能不再使用 pickle 来为每个池的参数进行哈希处理。
  • [文档]
    记录了 SQLite DATE/TIME/DATETIME 类型。(也适用于 0.6.7 版本)
    参考:#2029
  • [文档]
    修复了可变扩展文档以显示正确的类型关联方法。
    参考:#2118

0.7.0b3

发布日期:2011 年 3 月 20 日

通用

  • [通用]
    在 PyPy 下运行时,对单元测试进行了大量修复(感谢 Alex Gaynor)。

orm

  • [orm]
    改变了查询.count()的基本方法。现在 query.count()在所有情况下都是确切的:

查询。

from_self(func.count(literal_column(‘1’))). scalar()

  • 也就是说,“select count(1) from  ()”。这在所有情况下都会产生一个子查询,但大大简化了以前 count()  尝试做的所有猜测,尤其是当涉及到联合表继承和其他连接时,仍然会在许多情况下失败。如果对于本来非常简单的计数而产生的子查询确实是个问题,请使用  query(func.count()) 作为优化。
    参考:#2093
  • [orm]
    对于迭代过程中罕见的弱引用回调,对身份映射进行了一些更改。已经删除了互斥锁,因为它显然可能导致重新进入(即在一个线程中)死锁,可能是因为  gc 在迭代点收集对象以获得更多内存。希望“迭代过程中字典发生了变化”将会非常罕见,因为迭代方法在内部通过单个 values()  调用获取完整的对象列表。请注意,0.6.7 中的修复更加保守,仍然保持了互斥锁的位置。
    参考:#2087
  • [orm]
    对工作单元的微调导致按照关系依赖关系对刷新进行排序,即使给定的对象在内存中没有任何属性间的引用,这是  0.5 及更早版本的行为,因此仅设置外键/主键的 Parent/Child 的刷新将成功。这样一来,仍然保持了 0.6  及以上版本不生成大量与当前刷新实际状态不符的无用内部依赖结构。
    参考:#2082
  • [orm]
    在查询只针对列实体时与(通常不正确地)使用加载器选项一起使用时,错误消息的改进,其中父实体未完全存在。
    参考:#2069
  • [orm]
    修复了 query.options() 中的错误,该错误使得对使用字符串键的 lazyload 应用路径的属性可能与错误的实体上的同名属性重叠。请注意,0.6.7 对此进行了更加保守的修复。
    参考:#2098

示例

  • [示例]
    更新了关联、关联代理示例以使用声明式,添加了一个新的示例 dict_of_sets_with_default.py,这是一个关联代理的“挑战极限”的示例。
  • [示例]
    Beaker 缓存示例允许在 query_callable() 函数中传递一个“query_cls”参数。(也在 0.6.7 中)
    参考:#2090

引擎

  • [引擎]
    修复了 AssertionPool 的回归 bug。
    参考:#2097
  • [引擎]
    当指定无效的方言时,将引发 ArgumentError 异常。
    参考:#2060

sql

  • [sql]
    为 Column 被子类化且 _make_proxy()由于构造函数的 TypeError 而无法复制时添加了完全描述性的错误消息。在这种情况下应该实现 _method _constructor。
  • [sql]
    为 Table 对象添加了新的事件“column_reflect”。在反射生成对象之前接收关于 Column 的信息字典,并允许修改字典以控制生成的 Column 的大多数方面,包括键、名称、类型、信息字典。
    参考���#2095
  • [sql]
    为了帮助使用特定  Table 对象而不是所有 Table 实例的“column_reflect”事件,可以在 Table  对象的构造中使用一个新参数“listeners”添加监听器,一个形式为(, )的元组列表,这些监听器在反射过程开始之前应用于 Table。
  • [sql]
    添加了新的通用函数“next_value()”,接受一个 Sequence 对象作为其参数,并在目标平台上呈现适当的“next value”生成字符串,如果支持的话。还在 Sequence 本身上提供“.next_value()”方法。
    参考:#2085
  • [sql]
    func.next_value()或其他 SQL 表达式可以直接嵌入到 insert()构造中,如果与主键列一起使用隐式或显式的“returning”,则新生成的值将出现在 result.inserted_primary_key 中。
    参考:#2084
  • [sql]
    为 ResultProxy 添加了访问器“returns_rows”、“is_insert”(也在 0.6.7 中)
    参考:#2089

postgresql

  • [postgresql]
    为 postgresql 方言添加了 RESERVED_WORDS。(也在 0.6.7 中)
    参考:#2092
  • [postgresql]
    修复了 BIT 类型以允许“length”参数、“varying”参数。反射也已修复。(也在 0.6.7 中)
    参考:#2073

mssql

  • [mssql]
    重写了用于获取视图定义的查询,通常在使用 Inspector 接口时,使用 sys.sql_modules 而不是信息模式,从而允许完全返回长于 4000 个字符的视图定义。(也在 0.6.7 中)
    参考:#2071

misc

  • [declarative]
    mapper_args 中不是“可哈希”的参数不会被误认为总是可哈希的,可能是列参数。(也在 0.6.7 中)
    参考:#2091
  • [firebird]
    如果将“implicit_returning”标志设置为 False,则 create_engine()上的“implicit_returning”标志将被尊重。(也在 0.6.7 中)
    参考:#2083
  • [informix]
    添加了 RESERVED_WORDS informix 方言。(也在 0.6.7 中)
    参考:#2092
  • [ext]
    horizontal_shard ShardedSession 类接受常见的 Session 参数“query_cls”作为构造函数参数,以启用对 ShardedQuery 的进一步子类化。(也适用于 0.6.7)
    参考:#2090

一般

  • [一般]
    在 PyPy 下运行时修复了许多单元测试(由 Alex Gaynor 提供)。

ORM

  • [ORM]
    更改了 query.count()的基本方法。现在,在所有情况下,query.count()都是确切的:

查询。

from_self(func.count(literal_column(‘1’))). scalar()

  • 也就是说,“select count(1) from  ()”。这在所有情况下都会产生一个子查询,但大大简化了以���count()尝试做的所有猜测,以前在许多情况下仍然会失败,特别是当涉及联接表继承和其他联接时。如果为否则非常简单的计数生成的子查询真的是一个问题,请使用  query(func.count())作为优化。
    参考:#2093
  • [ORM]
    关于迭代期间罕见的弱引用回调进行了一些对身份映射的更改。互斥锁已被移除,因为它显然会导致一个(即在一个线程中)可重入的死锁,也许是在迭代时  gc 在获取更多内存时收集对象的时候。希望“在迭代期间更改字典”会非常罕见,因为迭代方法在内部通过单个  values()调用获取完整的对象列表。请注意,0.6.7 在这里有一个更为保守的修复,仍然保留了互斥锁。
    参考:#2087
  • [ORM]
    对工作单元进行微调,使其沿着  relationship()依赖关系排序刷新,即使给定的对象在内存中没有任何属性间引用,这是 0.5 及更早版本的行为,因此只设置外键/主键的  Parent/Child 的刷新将成功。同时,仍然保持 0.6  及以上版本不会在刷新中生成大量无用的内部依赖结构,这些结构与当前刷新中实际状态不符。
    参考:#2082
  • [ORM]
    在与(通常是错误地)使用加载器选项一起查询仅列实体时,改进了发出的错误消息,其中父实体不完全存在。
    参考:#2069
  • [ORM]
    修复了 query.options()中的一个 bug,其中应用于使用字符串键的延迟加载的路径可能会与错误实体上的同名属性重叠。请注意,0.6.7 对此有一个更为保守的修复。
    参考:#2098

示例

  • [示例]
    更新了关联、关联代理示例以使用声明性,并添加了一个新示例 dict_of_sets_with_default.py,这是一个关联代理的“突破极限”示例。
  • [示例]
    Beaker 缓存示例允许在 query_callable()函数中使用“query_cls”参数。(也适用于 0.6.7)
    参考:#2090

engine

  • [engine]
    修复了 AssertionPool 回归错误。
    参考:#2097
  • [engine]
    当指定无效的方言时,将引发 ArgumentError 异常。
    参考:#2060

sql

  • [sql]
    为 Column 子类化并由于构造函数的 TypeError 而使 _make_proxy()无法复制时,添加了一个完全描述性的错误消息。在这种情况下应该实现 _method _constructor。
  • [sql]
    添加了 Table 对象的新事件“column_reflect”。在生成对象之前,接收有关 Column 的信息字典,并允许修改字典以控制生成的 Column 的大多数方面,包括键、名称、类型、信息字典。
    参考:#2095
  • [sql]
    为了帮助“column_reflect”事件与特定  Table 对象一起使用,而不是所有 Table 实例,可以在 Table  对象的构造中内联添加监听器,使用一个新的参数“listeners”,一个形式为(,)的元组列表,这些应用于 Table 在反射过程开始之前。
  • [sql]
    添加了新的通用函数“next_value()”,接受一个 Sequence 对象作为其参数,并在目标平台上呈现适当的“下一个值”生成字符串,如果支持的话。还在 Sequence 本身上提供了“.next_value()”方法。
    参考:#2085
  • [sql]
    func.next_value()或其他 SQL 表达式可以直接嵌入到 insert()构造中,如果与主键列一起使用隐式或显式的“returning”,则新生成的值将出现在 result.inserted_primary_key 中。
    参考:#2084
  • [sql]
    为 ResultProxy 添加了访问器“returns_rows”、“is_insert”(也适用于 0.6.7 版本)
    参考:#2089

postgresql

  • [postgresql]
    为 postgresql 方言添加了 RESERVED_WORDS。(也适用于 0.6.7 版本)
    参考:#2092
  • [postgresql]
    修复了 BIT 类型以允许“length”参数,“varying”参数。反射也已修复。(也适用于 0.6.7 版本)
    参考:#2073

mssql

  • [mssql]
    重写了用于获取视图定义的查询,通常在使用 Inspector 接口时,使用 sys.sql_modules 而不是信息模式,从而允许完全返回超过 4000 个字符的视图定义。(也适用于 0.6.7 版本)
    参考:#2071

misc

  • [declarative]
    mapper_args 中不可“哈希化”的参数不会被误认为始终可哈希化,可能是列参数。(也适用于 0.6.7 版本)
    参考:#2091
  • [firebird]
    如果将“implicit_returning”标志设置为 False,则 create_engine()上的标志将被遵守。(也适���于 0.6.7 版本)
    参考:#2083
  • [informix]
    添加了 RESERVED_WORDS informix 方言。(也适用于 0.6.7 版本)
    参考:#2092
  • [ext]
    horizontal_shard ShardedSession 类接受常见的 Session 参数“query_cls”作为构造函数参数,以便进一步对 ShardedQuery 进行子类化。(也适用于 0.6.7 版本)
    参考:#2090

0.7.0b2

发布日期:2011 年 2 月 19 日

orm

  • [orm]
    修复了 Session.merge()调用 load()事件时参数少一个的错误。
    参考:#2053
  • [orm]
    添加了逻辑,防止从 MapperExtension 或 SessionExtension 生成的事件为所有未重写的方法生成无效事件。
    参考:#2052

examples

  • [examples]
    Beaker 示例现在考虑了在生成缓存键时嵌入 FROM 子句内的‘limit’和‘offset’、绑定参数(比如当您使用 union()或 from_self()时)。

sql

  • [sql]
    将 EngineEvents 事件类重命名为 ConnectionEvents。由于这些类从不直接被最终用户代码访问,因此这严格来说是一个面向最终用户的文档更改。还简化了内部如何将事件与引擎和连接关联起来的方式。
    参考:#2059
  • [sql]
    当通过其“metadata”参数传递一个  MetaData()对象给 Sequence()构造函数时,在 metadata.create_all()和  metadata.drop_all()中将包含在 CREATE/DROP 语句中,“checkfirst”逻辑也会被包括进去。
    参考:#2055
  • [sql]
    Column.references()方法现在在确切引用给定列的外键时返回 True,而不仅仅是其父表。
    参考:#2064

postgresql

  • [postgresql]
    修复了从 0.6 版本开始的一个回归问题,即 SMALLINT 和 BIGINT 类型都会在整数主键列上生成 SERIAL,而不是 SMALLINT 和 BIGSERIAL。
    参考:#2065

misc

  • [declarative]
    修复了一个回归问题,即将 Column 对象与 composite()一起放置在内联位置时会导致初始化失败。现在 Column 对象可以与 composite()内联或外部,并通过名称或对象引用引入。
    参考:#2058
  • [declarative]
    修复了错误消息引用旧的@classproperty 名称以引用@declared_attr 的问题(也适用于 0.6.7 版本)
    参考:#2061
  • [declarative]
    table_args 元组末尾的字典现在是可选的。
    参考:#1468
  • [ext]
    当代理一个多对一标量属性到一个一对多集合时,关联代理现在对 any()、has() 和 contains() 有了正确的行为(即“典型”关联代理用例的反向)
    参考:#2054

orm

  • [orm]
    修复了 Session.merge() 调用 load() 事件时参数少一个的错误。
    参考:#2053
  • [orm]
    添加了逻辑,防止从 MapperExtension 或 SessionExtension 生成事件,为所有未重写的方法生成无用事件。
    参考:#2052

示例

  • [示例]
    Beaker 示例现在考虑了在生成缓存键时嵌入 FROM 子句内的 ‘limit’ 和 ‘offset’、绑定参数(比如当使用 union() 或 from_self() 时)。

sql

  • [sql]
    将 EngineEvents 事件类重命名为 ConnectionEvents。由于这些类从不直接被最终用户代码访问,因此这严格来说是最终用户的文档更改。还简化了内部如何将事件链接到引擎和连接的方式。
    参考:#2059
  • [sql]
    当通过其  ‘metadata’ 参数传递一个 MetaData() 对象给 Sequence() 构造时,将在  metadata.create_all() 和 metadata.drop_all() 中的 CREATE/DROP  语句中包含它,包括“checkfirst”逻辑。
    参考:#2055
  • [sql]
    Column.references() 方法现在如果有一个外键引用给定列的外���,而不仅仅是其父表,则返回 True。
    参考:#2064

postgresql

  • [postgresql]
    从 0.6 中的回归中修复了 SMALLINT 和 BIGINT 类型都会在整数 PK 列上生成 SERIAL,而不是 SMALLINT 和 BIGSERIAL
    参考:#2065

杂项

  • [声明式]
    修复了复合() 与内联放置的 Column 对象会初始化失败的回归。现在,Column 对象可以与复合() 内联或外部,并通过名称或对象引用引入。
    参考:#2058
  • [声明式]
    修复错误消息引用旧的 @classproperty 名称以引用 @declared_attr(也在 0.6.7 中)
    参考:#2061
  • [声明式]
    现在,在 table_args 元组末尾的字典是可选的。
    参考:#1468
  • [ext]
    当代理一个多对一标量属性到一个一对多集合时,关联代理现在对 any()、has() 和 contains() 有了正确的行为(即“典型”关联代理用例的反向)
    参考:#2054

0.7.0b1

发布日期:2011 年 2 月 12 日星期六

通用

  • [通用]
    新事件系统,取代所有扩展、监听器等。
    参考:#1902
  • [general]
    日志增强
    参考:#1926
  • [general]
    安装不再安装 Nose 插件
    参考:#1949
  • [general]
    在  sys.modules 中已删除“sqlalchemy.exceptions”别名。基本 SQLA 异常可通过“from sqlalchemy  import exc”获得。对于“exc”,“exceptions”别名目前仍在“sqlalchemy”中保留,只是没有被修补到  sys.modules 中。

orm

  • [orm]
    更简洁的 query.join(target, onclause) 形式
    参考:#1923
  • [orm]
    混合属性,实现/取代 synonym()
    参考:#1903
  • [orm]
    重写复合物
    参考:#2008
  • [orm]
    变异事件扩展,取代“mutable=True”
    参见
    变异事件扩展,取代“mutable=True”
  • [orm]
    PickleType 和 ARRAY 的可变性默认关闭
    参考:#1980
  • [orm]
    简化的 polymorphic_on 赋值
    参考:#1895
  • [orm]
    允许刷新没有父��的孤立体
    参考:#1912
  • [orm]
    调整刷新记账步骤,以在  autocommit=True 的情况下在提交之前发生。这允许 autocommit=True 与 expire_on_commit=True  正常工作,并且还允许后刷新会话钩子在与 autocommit=False 时相同的事务上下文中运行。
    参考:#2041
  • [orm]
    在刷新时生成警告,集合成员,标量引用不是刷新的一部分
    参考:#1973
  • [orm]
    非 Table 派生结构可以映射
    参考:#1876
  • [orm]
    查询中的元组标签名称改进
    参考:#1942
  • [orm]
    映射列属性首先引用最具体的列
    参考:#1892
  • [orm]
    映射到具有两个或更多同名列的连接需要明确声明
    参考:#1896
  • [orm]
    映射器要求 polymorphic_on 列存在于映射的可选择中
    参考:#1875
  • [orm]
    compile_mappers() 重命名为 configure_mappers(),简化配置内部
    参考:#1966
  • [orm]
    如果传递了 SQL FromClause 元素(即非映射类)给 aliased() 函数,它将返回 element.alias() 而不是在 AliasedClass 上引发错误。
    参考:#2018
  • [orm]
    Session.merge()将检查传入状态的版本 id 与数据库的版本 id 是否匹配,假设映射使用版本 id 并且传入状态已分配版本 id,并在它们不匹配时引发 StaleDataError。
    参考:#2027
  • [orm]
    Session.connection(),Session.execute()接受‘bind’,以允许执行/连接操作显式参与引擎的开放事务。
    参考:#1996
  • [orm]
    Query.join(),Query.outerjoin(),eagerload(),eagerload_all()等不再允许将属性列表作为参数(即 option([x, y, z])形式,自 0.5 版本起已被弃用)。
  • [orm]
    ScopedSession.mapper 已被移除(自 0.5 版本起已被弃用)。
  • [orm]
    水平分片查询将“shard_id”放置在 context.attributes 中,可以通过“load()”事件访问。
    参考:#2031
  • [orm]
    跨多个实体进行单个 contains_eager()调用将指示沿该路径的所有集合应该加载,而不需要为每个端点分别进行不同的 contains_eager()调用(这从未被正确记录)。
    参考:#2032
  • [orm]
    在 orm.aliased()中使用的“name”字段现在会在生成的 SQL 语句中呈现。
  • [orm]
    Session weak_instance_dict=False 已被弃用。
    参考:#1473
  • [orm]
    在罕见情况下,如果在父对象被取消引用后发生附加或类似事件的情况,将引发异常,这将阻止父对象在会话中被标记为“脏”。在 0.6.6 中是一个警告。
    参考:#2046
  • [orm]
    Query.distinct()现在接受列表达式作为*args,由 PostgreSQL 方言解释为 DISTINCT ON ()。
    参考:#1069
  • [orm]
    在  flush()期间对“多对一”关系加载进行了额外调整。0.6.6 版本的更改([ticket:2002])要求在 flush  期间可能会发生更多“不必要”的 m2o 加载。已添加额外的加载模式,以便在这种特定用例中发出的 SQL 被修剪回来,同时仍然检索 flush  所需的信息,以免遗漏任何内容。
    参考:#2049
  • [orm]
    作为传递给 attributes.get_history()的“passive”值应该是 attributes 包中定义的常量之一。发送 True 或 False 已被弃用。
  • [orm]
    向 Query.subquery()添加了一个 name 参数,以允许为别名对象分配固定名称。(也适用于 0.6.7)
    参考:#2030
  • [orm]
    当一个联接表继承映射器在本地映射表上没有主键(但在超类表上有主键)时,会发出警告。(也适用于 0.6.7)
    参考:#2019
  • [orm]
    修复了一个  bug,当多态层次结构中的“中间”类没有指定 ‘polymorphic_identity’ 时,将没有 ‘polymorphic_on’  列,导致刷新时出现奇怪的错误,从目标查询时加载错误的类。 当使用单表继承时,也会发出正确的 WHERE 条件。 (也适用于 0.6.7)
    参考:#2038
  • [orm]
    修复了一个 bug,当具有 SQL 或服务器端默认值的列被使用 include_properties 或 exclude_properties 排除时,会导致 UnmappedColumnError。 (也适用于 0.6.7)
    参考:#1995
  • [orm]
    在罕见情况下,当在父对象被取消引用后发生附加或类似事件时,会发出警告,这会阻止父对象在会话中被标记为“脏”。 这在 0.7 中将是一个异常。(也适用于 0.6.7)
    参考:#2046

sql

  • [sql]
    添加了 over() 函数,FunctionElement  类的方法,生成 _Over() 结构,进而生成“窗口函数”,即“<窗口函数> OVER (PARTITION BY  <按分区>, ORDER BY <按顺序>)”。
    参考:#1844
  • [sql]
    LIMIT/OFFSET 子句现在使用绑定参数
    参考:#805
  • [sql]
    select.distinct() 现在接受列表达式作为 *args,由 PostgreSQL 方言解释为 DISTINCT ON (<表达式>)。请注意,通过将列表传递给 select() 的 distinct 关键字参数已经可用。
    参考:#1069
  • [sql]
    select.prefix_with() 接受多个表达式(即 *表达式),select() 的 ‘prefix’ 关键字参数接受列表或元组。
  • [sql]
    将字符串传递给 select() 的 distinct 关键字参数以发出特殊的 MySQL 关键字(DISTINCTROW 等)已被弃用 - 为此使用 prefix_with()。
  • [sql]
    TypeDecorator 适用于主键列
    参考:#2005, #2006
  • [sql]
    DDL() 构造现在转义百分号
    参考:#1897
  • [sql]
    Table.c / MetaData.tables 稍微调整,不允许直接修改
    参考:#1893, #1917
  • [sql]
    传递给 bindparam() 的可调用对象不会被评估
    参考:#1950
  • [sql]
    types.type_map 现在是私有的,types._type_map
    参考:#1870
  • [sql]
    非公共 Pool 方法使用下划线标记
    参考:#1982
  • [sql]
    添加了 NULLS FIRST 和 NULLS LAST 支持。它作为 asc() 和 desc() 操作符的扩展实现,称为 nullsfirst() 和 nullslast()。
    参考:#723
  • [sql]
    Index() 构造可以与 Table 定义内联创建,使用字符串作为列名,作为在 Table 外创建索引的替代方法。
  • [sql]
    Connection 上的 execution_options() 接受“isolation_level”参数,仅为该连接设置事务隔离级别,直到返回到连接池,对于支持它的后端(SQLite,PostgreSQL)
    参考:#2001
  • [sql]
    Integer 的 TypeDecorator 可以与主键列一起使用,并且各种方言的“autoincrement”特性以及“sqlite_autoincrement”标志将遵守底层数据库类型为 Integer 的设定。
    参考:#2005
  • [sql]
    当  Integer 主键列存在 server_default 时确立了一致性。SQLA 不会预取这些值,也不会在  cursor.lastrowid(DBAPI)中返回。确保所有后端在这种情况下一致地返回 None 给  result.inserted_primary_key。关于这种情况的反射,具有 server_default 的 int  主键列的反射会将“autoincrement”标志设置为 False,除非是 PG SERIAL 列,我们检测到一个序列默认值。
    参考:#2020#2021
  • [sql]
    结果行处理器应用于预执行的 SQL 默认值,以及 cursor.lastrowid,在确定 result.inserted_primary_key 的内容时。
    参考:#2006
  • [sql]
    在 select 的“columns clause”中存在的绑定参数现在像其��“匿名”子句一样自动标记,这样在获取行时它们的“类型”就有意义,就像结果行处理器一样。
  • [sql]
    TypeDecorator 存在于“sqlalchemy”导入空间中。
  • [sql]
    在 execute() 调用范围内发生的非 DBAPI 错误现在被包装在 sqlalchemy.exc.StatementError 中,并包含 SQL 语句的文本和 params 的 repr()。这使得更容易识别在 DBAPI 参与之前失败的语句执行。
    参考:#2015
  • [sql]
    将“.bind”直接与 ClauseElement 关联的概念明确地移动到 Executable,即描述表示引擎可执行构造的 ClauseElements 的 mixin。这个改变是对内部组织的改进,不太可能影响任何真实世界的使用。
    参考:#2048
  • [sql]
    Column.copy() 在 table.tometadata() 中使用,会复制 ‘doc’ 属性。(也适用于 0.6.7)
    参考:#2028
  • [sql]
    向 resultproxy.c 扩展添加了一些 defs,以便该扩展在 Python 2.4 上编译和运行。(也适用于 0.6.7)
    参考:#2023
  • [sql]
    编译器扩展现在支持覆盖 expression._BindParamClause 的默认编译,包括 insert()/update() 语句的 VALUES/SET 子句中的自动生成绑定也将使用新的编译规则。(也适用于 0.6.7)
    参考:#2042
  • [sql]
    SQLite 方言现在对基于文件的数据库使用 NullPool
    参考:#1921
  • [sql]
    通过 os.path.abspath() 规范给定为 sqlite 数据库位置的路径,以便进程内的目录更改不会影响相对文件路径的最终位置。
    参考:#2036

postgresql

  • [postgresql]
    当显式序列执行导致自动生成序列的 SERIAL 列的名称时,目前仅在 implicit_returning=False 时发生,现在采用与 PostgreSQL 相同的逻辑,如果表 + 列名称大于 63 个字符,则予以适应。(也适用于 0.6.7)
    参考:#1083
  • [postgresql]
    添加了一条额外的 libpq 消息到“断开”异常列表中,“无法从服务器接收数据”(也适用于 0.6.7)
    参考:#2044

mysql

  • [mysql]
    新增对 pymysql 的 DBAPI 支持,pymysql 是 MySQL-python 的纯 Python 移植版。
    参考:#1991
  • [mysql]
    oursql 方言在 create_engine() 中接受与 MySQLdb 相同的“ssl”参数。(也适用于 0.6.7)
    参考:#2047

mssql

  • [mssql]
    当未指定长度时,字符串/Unicode 类型及其对应的 VARCHAR/NVARCHAR 类型在不特定长度时发出 “max” 作为长度,因此默认长度,通常为 SQL 服务器文档中的 ‘1’,改为 ‘无界’。对于 VARBINARY 类型也是如此。
    此行为使这些类型与 PostgreSQL 的 VARCHAR 类型更加兼容,当未指定长度时同样是无界的。
    参考:#1833

misc

  • [no_tags]
    下面对每个变更的详细描述在这里描述:docs.sqlalchemy.org/en/latest/changelog/migration_07.html
  • [declarative]
    添加了对在声明类的列属性上使用名称 ‘metadata’ 的情况的显式检查。(也适用于 0.6.7)
    参考:#2050
  • [firebird]
    一些调整以支持 Interbase。FB/Interbase 版本标识被解析为结构,如(8, 1, 1, ‘interbase’)或(2, 1, 588, ‘firebird’),以便区分它们。
    参考:#1885

通用

  • [通用]
    新事件系统,取代所有扩展、监听器等
    参考:#1902
  • [通用]
    日志增强
    参考:#1926
  • [通用]
    设置不再安装 Nose 插件
    参考:#1949
  • [通用]
    “sqlalchemy.exceptions”在  sys.modules 中的别名已被移除。基本 SQLA 异常可通过“from sqlalchemy import  exc”获得。“exceptions”对于“exc”的别名目前仍在“sqlalchemy”中,只是没有被打补丁到 sys.modules 中。

orm

  • [orm]
    更简洁的查询.join(target, onclause)形式
    参考:#1923
  • [orm]
    混合属性,实现/取代 synonym()
    参考:#1903
  • [orm]
    重写复合体
    参考:#2008
  • [orm]
    变异事件扩展,取代“mutable=True”
    另请参阅
    变异事件扩展,取代“mutable=True”
  • [orm]
    PickleType 和 ARRAY 的可变性默认关闭
    参考:#1980
  • [orm]
    简化的多态性分配
    参考:#1895
  • [orm]
    允许刷新没有父级的孤立对象
    参考:#1912
  • [orm]
    调整了在  autocommit=True 情况下在提交之前发生的刷新记账步骤。这使得 autocommit=True 能够与  expire_on_commit=True 正常工作,并且还允许后刷新会话钩子在与 autocommit=False 时相同的事务上下文中运行。
    参考:#2041
  • [orm]
    在集合成员、标量引用不属于刷新时生成的警告
    参考:#1973
  • [orm]
    非 Table 派生构造可以映射
    参考:#1876
  • [orm]
    查询改进中的元组标签名称
    参考:#1942
  • [orm]
    映射列属性首先引用最具体的列
    参考:#1892
  • [orm]
    映射到具有两个或更多同名列的连接需要明确声明
    参考:#1896
  • [orm]
    映射器要求在映射的可选择性中存在多态性列
    参考:#1875
  • [orm]
    compile_mappers()重命名为 configure_mappers(),简化了配置内部
    参考:#1966
  • [orm]
    如果传递了 SQL FromClause 元素(即非映射类),aliased()函数将返回 element.alias(),而不会在 AliasedClass 上引发错误。
    参考:#2018
  • [orm]
    Session.merge()将检查传入状态的版本 id 与数据库的版本 id 是否匹配,假设映射使用版本 id 并且传入状态已分配了 version_id,并且如果它们不匹配,则引发 StaleDataError。
    参考:#2027
  • [orm]
    Session.connection(),Session.execute()接受‘bind’,以允许执行/连接操作明确参与引擎的开放事务。
    参考:#1996
  • [orm]
    Query.join(),Query.outerjoin(),eagerload(),eagerload_all(),其他不再接受属性列表作为参数(即 option([x, y, z])形式,自 0.5 版本起已弃用)
  • [orm]
    ScopedSession.mapper 已移除(自 0.5 版起已弃用)。
  • [orm]
    水平分片查询将“shard_id”放置在 context.attributes 中,可以通过“load()”事件访问。
    参考:#2031
  • [orm]
    跨多个实体进行单个 contains_eager()调用将指示沿该路径加载所有集合,而不需要针对每个端点进行不同的 contains_eager()调用(这从未被正确记录)。
    参考:#2032
  • [orm]
    orm.aliased()中使用的“name”字段现在在生成的 SQL 语句中呈现。
  • [orm]
    Session weak_instance_dict=False 已弃用。
    参考:#1473
  • [orm]
    在罕见情况下,如果在父对象被取消引用后发生附加或类似事件,则会引发异常,这会阻止将父对象在会话中标记为“脏”。在 0.6.6 版中是一个警告。
    参考:#2046
  • [orm]
    Query.distinct()现在接受列表达式作为*args 参数,由 PostgreSQL 方言解释为 DISTINCT ON ()。
    参考:#1069
  • [orm]
    在  flush()期间进一步调整“多对一”关系加载。0.6.6 版本中的更改([ticket:2002])要求在 flush  期间可能发生更多“不必要的”m2o 加载。已添加额外的加载模式,以便在这种特定用例中发出的 SQL 被修剪回来,同时仍然检索 flush  需要的信息,以免漏掉任何内容。
    参考:#2049
  • [orm]
    作为传递给 attributes.get_history() 的“被动”值应该是属性包中定义的常量之一。发送 True 或 False 已弃用。
  • [orm]
    向 Query.subquery() 添加了一个 name 参数,以允许将固定名称分配给别名对象。(同时也适用于 0.6.7 版)
    参考:#2030
  • [orm]
    当一个连接的表继承映射器在本地映射表上没有主键(但在超类表上有主键)时会发出警告。(同时也适用于 0.6.7 版)
    参考:#2019
  • [orm]
    修复了多态层次结构中的“中间”类如果没有指定“多态标识”则不会有“多态标识”列的错误,导致刷新时出现奇怪的错误,从该目标查询时加载错误的类。还在单表继承时发出正确的 WHERE 条件。(同时也适用于 0.6.7 版)
    参考:#2038
  • [orm]
    修复了将具有 SQL 或服务器端默认值的列从映射中排除(使用 include_properties 或 exclude_properties)会导致 UnmappedColumnError 的错误。(同时也适用于 0.6.7 版)
    参考:#1995
  • [orm]
    在罕见情况下,在父对象被取消引用后发生集合的追加或类似事件时会发出警告,这会阻止将父对象标记为会话中的“脏”对象。这将在 0.7 版中成为异常。(同时也适用于 0.6.7 版)
    参考:#2046

sql

  • [sql]
    添加了 over() 函数,作为 FunctionElement 类的方法,生成 _Over() 结构,进而生成“窗口函数”,即“ OVER (PARTITION BY , ORDER BY )”。
    参考:#1844
  • [sql]
    LIMIT/OFFSET 子句现在使用绑定参数
    参考:#805
  • [sql]
    select.distinct() 现在接受列表达式作为 *args,由 PostgreSQL 方言解释为 DISTINCT ON ()。请注意,通过将列表传递给 select() 的 distinct 关键字参数已经可以实现这一点。
    参考:#1069
  • [sql]
    select.prefix_with() 接受多个表达式(即 *expr),select() 的 ‘prefix’ 关键字参数接受列表或元组。
  • [sql]
    将字符串传递给 select() 的 distinct 关键字参数以发出特殊的 MySQL 关键字(DISTINCTROW 等)已弃用 - 为此使用 prefix_with()。
  • [sql]
    TypeDecorator 与主键列一起使用
    参考:#2005, #2006
  • [sql]
    DDL() 构造现在转义百分号
    参考:#1897
  • [sql]
    Table.c / MetaData.tables 稍作调整,不允许直接变异
    参考:#1893, #1917
  • [sql]
    传递给 bindparam()的可调用对象不会被评估
    参考:#1950
  • [sql]
    types.type_map 现在是私有的,types._type_map
    参考:#1870
  • [sql]
    下划线表示非公共 Pool 方法
    参考:#1982
  • [sql]
    添加了 NULLS FIRST 和 NULLS LAST 支持。它被实现为 asc()和 desc()运算符的扩展,称为 nullsfirst()和 nullslast()。
    参考:#723
  • [sql]
    Index()构造可以与 Table 定义内联创建,使用字符串作为列名,作为在 Table 之外创建索引的替代方法。
  • [sql]
    Connection 上的 execution_options()接受“isolation_level”参数,仅为该连接设置事务隔离级别,直到返回到连接池,对于支持它的后端(SQLite,PostgreSQL)
    参考:#2001
  • [sql]
    可以使用 Integer 的 TypeDecorator 与主键列一起使用,并且各种方言的“autoincrement”特性以及“sqlite_autoincrement”标志将尊重底层数据库类型为基于 Integer 的情况。
    参考:#2005
  • [sql]
    当  Integer PK 列上存在 server_default 时确立了一致性。SQLA 不会预取这些,它们也不会在  cursor.lastrowid(DBAPI)中返回。确保所有后端在这种情况下一致地在 result.inserted_primary_key  中返回 None。关于此情况的反射,具有 server_default 的 int PK 列的反射将“autoincrement”标志设置为  False,除了在检测到序列默认值的 PG SERIAL 列的情况下。
    参考:#2020, #2021
  • [sql]
    在确定 result.inserted_primary_key 的内容时,结果行处理器应用于预执行的 SQL 默认值,以及 cursor.lastrowid。
    参考:#2006
  • [sql]
    在 select 的“columns clause”中存在的绑定参数现在像其他“匿名”子句一样自动标记,这样在获取行时它们的“type”就有意义,就像结果行处理器一样。
  • [sql]
    TypeDecorator 存在于“sqlalchemy”导入空间中。
  • [sql]
    在执行(execute())调用范围内发生的非  DBAPI 错误现在被包装在 sqlalchemy.exc.StatementError 中,并包含 SQL 语句的文本和 params 的  repr()。这样可以更容易地识别在 DBAPI 介入之前失败的语句执行。
    参考:#2015
  • [sql]
    将“.bind”直接与 ClauseElement 关联的概念明确地移动到 Executable,即描述表示引擎可执行构造的 ClauseElement 的 mixin。这一变化是对内部组织的改进,不太可能影响任何实际使用。
    参考:#2048
  • [sql]
    Column.copy(),在 table.tometadata()中使用,复制了‘doc’属性。(也适用于 0.6.7 版本)
    参考:#2028
  • [sql]
    向 resultproxy.c 扩展添加了一些 defs,以便该扩展在 Python 2.4 上编译和运行。(也适用于 0.6.7 版本)
    参考:#2023
  • [sql]
    编译器扩展现在支持覆盖默认的表达式编译。_BindParamClause,包括在 insert()/update()语句的 VALUES/SET 子句中自动生成的绑定也将使用新的编译规则。(也适用于 0.6.7 版本)
    参考:#2042
  • [sql]
    SQLite 方言现在对基于文件的数据库使用 NullPool
    参考:#1921
  • [sql]
    现在通过 os.path.abspath()对作为 sqlite 数据库位置的路径进行规范化,以便进程内的目录更改不会影响相对文件路径的最终位置。
    参考:#2036

postgresql

  • [postgresql]
    当显式序列执行推导出 SERIAL 列的自动生成序列的名称时,当前仅在 implicit_returning=False 时发生,现在使用与 PostgreSQL 相同的逻辑,如果表名+列名大于 63 个字符。 (也适用于 0.6.7 版本)
    参考:#1083
  • [postgresql]
    将“从服务器接收数据失败”添加到“断开连接”异常列表中的其他 libpq 消息(也适用于 0.6.7 版本)
    参考:#2044

mysql

  • [mysql]
    新的 DBAPI 支持 pymysql,这是 MySQL-python 的纯 Python 移植。
    参考:#1991
  • [mysql]
    oursql 方言在 create_engine()中接受与 MySQLdb 相同的“ssl”参数。(也适用于 0.6.7 版本)
    参考:#2047

mssql

  • [mssql]
    String/Unicode 类型及其对应的 VARCHAR/NVARCHAR 类型在未指定长度时会将“max”作为长度发出,因此默认长度,通常根据 SQL 服务器文档为‘1’,现在改为‘无限制’。对于 VARBINARY 类型也是如此。
    这种行为使这些类型更加与 PostgreSQL 的 VARCHAR 类型兼容,当未指定长度时也是无限制的。
    参考:#1833

杂项

  • [no_tags]
    以下是每个更改的详细描述:docs.sqlalchemy.org/en/latest/changelog/migration_07.html
  • [声明性]
    添加了一个显式检查,以防止在声明性类上使用名称‘metadata’作为列属性的情况。(也在 0.6.7 中)
    参考:#2050
  • [火鸟]
    进行了一些调整,以支持 Interbase。 FB/Interbase 版本标识被解析成一个结构,如(8, 1, 1, ‘interbase’)或(2, 1, 588, ‘firebird’),以便它们可以被区分。
    参考:#1885
相关文章
|
NoSQL Redis
使用slowapi对FastApi的接口进行限速
使用slowapi对FastApi的接口进行限速
3036 0
|
SQL 分布式计算 资源调度
阿里云MaxCompute-Hive作业迁移语法兼容性踩坑记录
阿里云MaxCompute-Hive作业迁移语法兼容性踩坑记录
1679 0
|
SQL 关系型数据库 数据库
SqlAlchemy 2.0 中文文档(二十三)(3)
SqlAlchemy 2.0 中文文档(二十三)
394 0
|
SQL 存储 缓存
SqlAlchemy 2.0 中文文档(三十七)(4)
SqlAlchemy 2.0 中文文档(三十七)
139 1
|
存储 开发工具 git
GIT LFS是什么
【4月更文挑战第21天】GIT LFS是什么
2884 1
|
SQL 存储 缓存
SqlAlchemy 2.0 中文文档(三十)(4)
SqlAlchemy 2.0 中文文档(三十)
225 0
|
11月前
|
网络协议 安全 应用服务中间件
服务器最大支持多少链接数
本文探讨了单台服务器最大支持的链接数问题,指出操作系统通过四元组(本地IP、本地端口、远程IP、远程端口)唯一标识TCP链接。链接数不仅受限于端口数量(65535),还与系统文件句柄上限、内存资源及是否绑定多个IP地址有关。通过调整系统配置和利用多IP技术,理论上可大幅提高单机支持的链接数,但实际应用中还需考虑硬件资源限制。
603 16
|
Docker Python Windows
pycharm使用fastapi/uvicorn无法reload的问题
这篇文章讨论了在PyCharm中使用FastAPI和uvicorn时遇到的无法快速重载的问题,并提供了包括降级uvicorn版本和使用命令行运行等解决方法。
pycharm使用fastapi/uvicorn无法reload的问题
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
226 2
|
Web App开发 数据采集 JavaScript
我们来看一个基本的`pyppeteer`使用示例,包括`launch()`和`newPage()`方法。
我们来看一个基本的`pyppeteer`使用示例,包括`launch()`和`newPage()`方法。