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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: SqlAlchemy 2.0 中文文档(六十六)

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


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() 或其他“从自身选择”操作时,添加到 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’执行同步规则;映射‘X’未映射此列”发出的错误消息,以引用正确的映射。同样在 0.6.8 版本中。
    参考:#2163
  • [orm]
    polymorphic_union() 现在有一个“cast_nulls”选项,当渲染带标签的 NULL 列时禁用 CAST 的使用。
    参考:#1502
  • [orm]
    polymorphic_union() 根据它们在多态联合列表中出现的第一个表/可选择的顺序呈现列。(除非传递了 OrderedDict,否则它本身是无序映射)。
  • [orm]
    修复了一个 bug,即如果 mapper 映射到匿名别名,如果使用了日志记录,由于别名中未转义的 % 符号,将会失败。也在 0.6.8 版本中修复。
    参考:#2171

示例

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

sql

  • [sql]
    修复了一个 bug,即在 select() 中嵌套另一个带有标签的 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() 在关闭内部获取的连接时有一些依赖于 GC,已修复。
  • [sql]
    添加了对 Column .name 赋空字符串时的显式检查。
    参考:#2140
  • [sql]
    修复了一个 bug,即如果将 FetchedValue 传递给 column server_onupdate,它将不会被分配给其父“column”,为所有列默认分配模式添加了测试覆盖。也在 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 扩展中的一些错误,其中未适当处理 None,替换事件也未适当处理。
    参考:#2143

0.7.0b4

发布日期:2011 年 4 月 17 日 星期日

general

  • [general]
    对 CHANGES 文件的格式进行了更改。这些格式更改已应用于 0.7 版本的发布。
  • [general]
    “-declarative”更改现在将直接列在“-orm”部分下面,因为它们密切相关。
  • [general]
    0.5 系列的更改已移至文件 CHANGES_PRE_06,取代了 CHANGES_PRE_05。
  • [general]
    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”评估进行了一些修复。在所有情况下,记录的检索都是在自动刷新之后进行的,并在发出更新/删除之前进行,以防止未刷新的数据存在以及在评估过程中出现过期对象失败。
    参考:#2122
  • [orm]
    重新修订了尝试刷新非多态子类的异常抛出时的异常。
    参考:#2063
  • [orm]
    当查询选项无法找到目标实体时,对于路径必须从根实体之一开始的情况进行了更多措辞调整。解释了路径必须从根实体之一开始。
  • [orm]
    关于反向引用(backrefs)的状态处理进行了一些修复,通常在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]
    修复了从 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

misc

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

0.7.0b3

发布日期:2011 年 3 月 20 日 星期日

general

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

orm

  • [orm]
    更改了查询.count() 的基础��法。现在,在所有情况下,查询.count() 精确地为:

query.

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,即应用于使用字符串键的 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 失败而无法进行复制时,添加了一个完整的描述性错误消息。在这种情况下应该实现 _constructor 方法。
  • [sql]
    为 Table 对象添加了新的事件“column_reflect”。在反射内生成对象之前接收有关 Column 的信息字典,并允许修改字典以控制生成的 Column 的大多数方面,包括键、名称、类型、信息字典。
    参考:#2095
  • [sql]
    为了帮助“column_reflect”事件与特定的  Table 对象一起使用而不是所有 Table 实例,可以在 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

杂项

  • [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

0.7.0b2

发布日期:2011 年 2 月 19 日

orm

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

示例

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

sql

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

postgresql

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

杂项

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

0.7.0b1

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

general

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

orm

  • [orm]
    更简洁的查询.join(target, onclause)形式
    参考:#1923
  • [orm]
    混合属性,实现/取代同义词()
    参考:#1903
  • [orm]
    复合体的重写
    参考:#2008
  • [orm]
    变异事件扩展,取代“mutable=True”
    另请参阅
    变异事件扩展,取代“mutable=True”
  • [orm]
    PickleType 和 ARRAY 的可变性默认关闭
    参考:#1980
  • [orm]
    简化的多态 _on 赋值
    参考:#1895
  • [orm]
    允许刷新没有父级的孤立对象
    参考:#1912
  • [orm]
    调整刷新记账步骤,以在  autocommit=True 的情况下在提交之前发生。这允许 autocommit=True 与 expire_on_commit=True  正常工��,并且还允许后刷新会话钩子在与 autocommit=False 时相同的事务上下文中运行。
    参考:#2041
  • [orm]
    在刷新时生成警告,集合成员,标量引用不是刷新的一部分
    参考:#1973
  • [orm]
    非表派生结构可以映射
    参考:#1876
  • [orm]
    查询改进中的元组标签名称
    参考:#1942
  • [orm]
    映射列属性首先引用最具体的列
    参考:#1892
  • [orm]
    映射到具有两个或更多同名列的连接需要明确声明
    参考:#1896
  • [orm]
    Mapper 要求映射选择中存在多态 _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”放在上下文属性中,可以通过“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]
    添加了一个 name 参数到 Query.subquery(),允许为别名对象分配一个固定的名称。(也适用于 0.6.7 版本)
    参考:#2030
  • [orm]
    当连接表继承映射器在本地映射表上没有主键(但在超类表上有主键)时,会发出警告。(也适用于 0.6.7 版本)
    参考:#2019
  • [orm]
    修复了多态层次结构中“中间”类如果没有指定“polymorphic_identity”列,就不会有“polymorphic_on”列的错误,导致刷新时出现奇怪的错误,从该目标查询时加载错误的类。在使用单表继承时也会发出正确的  WHERE 条件。(也适用于 0.6.7 版本)
    参考:#2038
  • [orm]
    修复了一个 bug,即具有 SQL 或服务器端默认值的列被排除在包含属性或排除属性的映射中,会导致 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 主键列上存在 server_default 时确保了一致性。SQLA 不会预取这些值,它们也不会在  cursor.lastrowid(DBAPI)中返回。确保所有后端在这种情况下一致地在 result.inserted_primary_key  中返回 None。关于这种情况的反射,具有 server_default 的 int 主键列的反射会将“autoincrement”标志设置为  False,除了在检测到序列默认值的 PG SERIAL 列的情况下。
    参考:#2020, #2021
  • [sql]
    在确定 result.inserted_primary_key 的内容时,结果行处理器会应用于预执行的 SQL 默认值,以及 cursor.lastrowid。
    参考:#2006
  • [sql]
    现在,在 select 语句的“columns clause”中存在的绑定参数会像其他“匿名”子句一样自动标记,这样在获取行时它们的“类型”就会有意义,就像结果行处理器一样。
  • [sql]
    TypeDecorator 存在于“sqlalchemy”导入空间中。
  • [sql]
    在  execute()调用范围内发生的非 DBAPI 错误现在被包装在 sqlalchemy.exc.StatementError 中,并包含  SQL 语句的文本和 params 的 repr()。这样可以更容易地识别在 DBAPI 介入之前失败的语句执行。
    参考:#2015
  • [sql]
    将直接将“.bind”与 ClauseElement 关联的概念明确地移动到 Executable,即描述表示引擎可执行构造的混合体。这个改变是对内部组织的改进,不太可能影响任何真实世界的使用。
    参考:#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]
    现在,作为 sqlite 数据库位置的路径通过 os.path.abspath() 进行标准化,以便进程内的目录更改不会影响相对文件路径的最终位置。
    参考:#2036

postgresql

  • [postgresql]
    当显式序列执行推断 SERIAL 列的自动生成序列的名称时,这仅在 implicit_returning=False 时发生,现在使用与 PostgreSQL 相同的逻辑,适应如果表 + 列名大于 63 个字符。(也适用于 0.6.7 版本)
    参考:#1083
  • [postgresql]
    添加了一个额外的 libpq 消息到“断开”异常列表中,“could not receive data from server”(也适用于 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 Server 文档为  ‘1’,现在为 ‘unbounded’。对于 VARBINARY 类型也是如此。
    当没有指定长度时,此行为使得这些类型更加兼容 PostgreSQL 的 VARCHAR 类型,后者在没有指定长度时同样是无界的。
    参考:#1833

杂项

  • [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

0.7.11

无发布日期

orm

  • [orm] [bug]
    修复了列表插入操作insert(0, item)时,列表仪器化无法正确表示[0:0]的 bug,特别是在使用关联代理时可能发生。由于 Python 集合中的一些怪癖,这个问题在 Python 3 中比在 Python 2 中更有可能发生。
    参考:#2807
  • [orm] [bug]
    修复了一个 bug,当查询形式为:query(SubClass).options(subqueryload(Baseclass.attrname)),其中SubClassBaseClass的联接继承时,会导致在属性加载时子查询内部的JOIN未应用到,产生笛卡尔积。填充的结果仍然倾向于是正确的,因为额外的行只是被忽略,所以这个问题可能会在其他方面正常工作的应用程序中表现为性能下降。
    参考:#2699
  • [orm] [bug]
    修复了在工作单元中的一个 bug,即当两个表之间没有设置 ForeignKey 约束时,联接继承子类可能会在父表之前插入“子”表的行。
    参考:#2689
  • [orm] [bug]
    改进了在检测到“反向引用循环”时发出的错误消息,即当属性事件触发两个其他属性之间的双向赋值时。这种情况不仅会在分配错误类型的对象时发生,还会在属性被错误配置为反向引用到现有反向引用对时发生。
    参考:#2674
  • [orm] [bug]
    当将  MapperProperty  分配给替换现有属性的映射器时,如果涉及的属性不是简单的基于列的属性,则会发出警告。替换关系属性很少(或从未?)是预期的,通常指的是映射器配置错误。如果在继承关系中的现有属性上配置了  backref 以覆盖现有属性,也会发出警告(这在 0.8 中是一个错误)。
    参考:#2674

engine

  • [engine] [bug]
    make_url()函数使用的正则表达式现在可以解析 ipv6 地址,例如被方括号括起来的地址。
    参考:#2851

sql

  • [sql] [bug]
    修复了自 0.7.9 以来的回归,即如果在多个 FROM 子句中引用了 CTE 的名称,则可能无法正确引用 CTE 的名称。
    参考:#2801
  • [sql] [bug] [cte]
    修复了公共表达式系统中的 bug,如果 CTE 仅用作alias()构造,则不会使用 WITH 关键字进行呈现。
    参考:#2783
  • [sql] [bug]
    修复了CheckConstraint DDL 中的 bug,其中Column对象的“quote”标志不会传播的问题。
    参考:#2784

postgresql

  • [postgresql] [feature]
    添加了对 PostgreSQL 传统的 SUBSTRING 函数语法的支持,当使用常规func.substring()时,呈现为“SUBSTRING(x FROM y FOR z)”形式。感谢 Gunnlaugur Þór Briem。
    参考:#2676

mysql

  • [mysql] [bug]
    更新了 MySQL 版本 5.5、5.6 的保留字,感谢 Hanno Schlichting。
    参考:#2791

测试

  • [tests] [bug]
    修复了在一些 Linux 平台上无法正常工作的 test_execute 中“logging”的导入问题。
    参考:#2669pull request 41

orm

  • [orm] [bug]
    修复了列表插入操作insert(0, item)与关联代理一起使用时,列表插入操作[0:0]的错误表示问题,特别是在使用 Python 3 时更容易出现此问题,而不是 Python 2。
    参考:#2807
  • [orm] [bug]
    修复了查询形式为:query(SubClass).options(subqueryload(Baseclass.attrname))的 bug,其中SubClassBaseClass的联合继承,将无法在属性加载中应用子查询中的JOIN,导致产生笛卡尔积。填充的结果仍然往往是正确的,因为额外的行只是被忽略,所以这个问题可能存在于其他方面正常工作的应用程序中作为性能下降。
    参考:#2699
  • [orm] [bug]
    修复了在联合继承子类在两个表之间没有设置外键约束的情况下,可能会在“sub”表之前插入父表的行的工作单元中的错误。
    参考:#2689
  • [orm] [bug]
    当检测到“backref 循环”时,即当属性事件触发两个其他属性之间的双向赋值时,改进了发出的错误消息。这种情况不仅发生在分配错误类型的对象时,还发生在属性配置错误地反向引用到现有的反向引用对时。
    参考:#2674
  • [orm] [bug]
    当将  MapperProperty  分配给替换现有属性的映射器时,如果相关属性不是基于简单列的属性,则会发出警告。很少(甚至从未?)预期替换关系属性,并且通常指的是映射器配置错误。如果在继承关系中的现有属性之上配置了  backref,则此警告还将警告(这在 0.8 中是错误的)。
    参考:#2674

engine

  • [engine] [bug]
    make_url()函数使用的正则表达式现在解析 ipv6 地址,例如,用方括号括起来。
    参考:#2851

sql

  • [sql] [bug]
    修复了自 0.7.9 以来的退化,即如果在多个 FROM 子句中引用了 CTE 的名称,则可能无法正确引用该名称。
    参考:#2801
  • [sql] [bug] [cte]
    修复了公共表达式系统中的错误,在该系统中,如果 CTE 仅用作alias()构造,则不会使用 WITH 关键字呈现。
    参考:#2783
  • [sql] [bug]
    修复了CheckConstraint DDL 中的错误,其中来自Column对象的“quote”标志不会被传播。
    参考:#2784

postgresql

  • [postgresql] [feature]
    添加了对 PostgreSQL 传统 SUBSTRING 函数语法的支持,当使用常规的func.substring()时,渲染为“SUBSTRING(x FROM y FOR z)” 。感谢 Gunnlaugur Þór Briem。
    参考:#2676

mysql

  • [mysql] [bug]
    MySQL 版本 5.5、5.6 的保留字更新,感谢 Hanno Schlichting。
    参考:#2791

tests

  • [tests] [bug]
    修复了在 test_execute 中导入“logging”时在某些 Linux 平台上无法工作的问题。
    参考:#2669pull request 41

0.7.10

发布日期:2013 年 2 月 7 日星期四

orm

  • [orm] [bug]
    修复了潜在的内存泄漏问题,该问题可能在创建任意数量的sessionmaker对象时发生。当 sessionmaker 创建的匿名子类在解除引用时,由于事件包中仍然存在类级别的引用,该子类不会被垃圾收集。此问题也适用于与事件调度程序结合使用临时子类的任何自定义系统。
    参考:#2650
  • [orm] [bug]
    Query.merge_result() 现在可以在外连接中加载可能为 None 的实体的行,而不会引发错误。
    参考:#2640
  • [orm] [bug]
    MutableComposite 类型以前不允许使用 MutableBase.coerce() 方法,尽管代码似乎表明了这一意图,所以现在这个方法可以使用了,并添加了一个简短的示例。作为副作用,此事件处理程序的机制已更改,以便新的 MutableComposite 类型不再添加每个类型的全局事件处理程序。同时也是在 0.8.0b2 中。
    参考:#2624
  • [orm] [bug]
    修复了 Session 计算错误的 bug,当用另一个具有相同主键的对象替换身份映射中的已删除对象时,如果替换的主键是通过非工作单元建立的 INSERT 语句或通过另一个实例的主键切换建立的,则在回滚()时会引发“冲突状态”错误。
    参考:#2583

engine

  • [engine] [bug]
    修复了 MetaData.reflect() 以正确使用给定的 Connection,如果给定,而不是从该连接的 Engine 中打开第二个连接。
    参考:#2604

sql

  • [sql] [bug]
    回溯调整了 TypeDecorator__repr__ 到 0.7 版本,允许 PickleType 产生一个干净的 repr(),以帮助 Alembic。
    参考:#2584, #2594
  • [sql] [bug]
    修复了当 Table.tometadata() 既有外键又有列的备用 “.key” 名称时会失败的 bug。
    参考:#2643
  • [sql] [bug]
    修复了在不传递“for_update=True”标志的情况下使用  server_onupdate= 会将默认对象应用于  server_default,覆盖原有内容的 bug。在这种用法中不应该需要显式的 for_update=True  参数(特别是因为文档显示的示例没有使用它),因此现在在内部使用给定默认对象的副本来安排,如果标志未设置为对应于该参数的值。
    参考:#2631
  • [sql] [gae] [mysql]
    gaerdbms 方言添加了条件导入,尝试导入 rdbms_apiproxy vs. rdbms_googleapi 以在开发和生产平台上同时工作。现在也支持 instance 属性。感谢 Sean Lynch。还将增强功能回溯到允许用户名/密码以及修复从 0.8 中解释错误代码的问题。
    参考:#2649

mysql

  • [mysql] [feature]
    向 OurSQL 方言添加了“raise_on_warnings”标志。
    参考:#2523
  • [mysql] [feature]
    向 MySQLdb 方言添加了“read_timeout”标志。
    参考:#2554

sqlite

  • [sqlite] [bug]
    对于在 0.7.9 中发布的与 SQLite 相关的问题进行了更多调整,以拦截旧版 SQLite 引用外键时的引号字符。除了拦截双引号外,现在还拦截其他引号字符,如括号、反引号和单引号。
    参考:#2568

mssql

  • [mssql] [bug]
    修复了在与 MSSQL 方言的“模式渲染”逻辑未考虑 .key 的情况下,在 Column 中使用“key”与拥有表的“模式”一起会导致无法定位结果行的 bug。
  • [mssql] [bug]
    在 mssql 信息模式中添加了 Py3K 条件,修复了不必要的 .decode() 调用,修复了 Py3k 中的反射问题。
    参考:#2638

oracle

  • [oracle] [bug]
    Oracle LONG 类型,虽然是一个无界文本类型,但在返回结果行时似乎没有使用 cx_Oracle.LOB 类型,因此方言已被修复,排除了对 LONG 的 cx_Oracle.LOB 过滤应用。
    参考:#2620
  • [oracle] [bug]
    修复了在与 cx_Oracle 结合使用 .prepare() 时的用法,以便返回值为 False 时不会调用 connection.commit(),从而避免“无事务”错误。已经证明 SQLAlchemy 和 cx_oracle 可以以一种基本的方式工作,但受到驱动程序观察到的警告的影响;请查看文档以获取详细信息。
    参考:#2611
  • [oracle] [bug]
    更改了从  setinputsizes()步骤中排除的 cx_oracle 类型列表,仅包括 STRING 和 UNICODE;CLOB 和 NCLOB  已被移除。这是为了解决 cx_oracle 在 executemany()调用中存在问题的行为。在 0.8 中,相同的更改也适用,但也可以通过  exclude_setinputsizes 参数进行配置。
    参考:#2561

orm

  • [orm] [bug]
    修复了潜在的内存泄漏问题,如果创建了任意数量的sessionmaker对象,可能会发生。当通过 sessionmaker 创建的匿名子类被解引用时,由于事件包中仍然存在类级别的引用,该子类将无法被垃圾回收。这个问题也适用于任何与事件调度程序一起使用临时子类的自定义系统。
    参考:#2650
  • [orm] [bug]
    Query.merge_result()现在可以从外连接中加载行,其中一个实体可能为None而不会抛出错误。
    参考:#2640
  • [orm] [bug]
    MutableComposite类型不允许使用MutableBase.coerce()方法,尽管代码似乎表明了这一意图,所以现在可以使用,并添加了一个简短的示例。作为副作用,此事件处理程序的机制已更改,以便新的MutableComposite类型不再添加每种类型的全局事件处理程序。也适用于 0.8.0b2。
    参考:#2624
  • [orm] [bug]
    修复了 Session 计数错误的 bug,即在身份映射中用另一个具有相同主键的对象替换已删除的对象,如果替换的主键是通过非工作单元建立的 INSERT 语句或通过另一个实例的主键切换建立的,则在 rollback()时会引发“冲突状态”错误。
    参考:#2583

engine

  • [engine] [bug]
    修复了MetaData.reflect()以正确使用给定的Connection,如果给定的话,而不是从该连接的Engine中打开第二个连接。
    参考:#2604

sql

  • [sql] [bug]
    将对TypeDecorator__repr__的调整回溯到 0.7 版本,允许PickleType生成一个干净的repr()以帮助 Alembic。
    参考:#2584, #2594
  • [sql] [bug]
    修复了一个 bug,即如果一个 Column 既有外键又有列的替代“.key”名称,那么Table.tometadata()将失败。
    参考:#2643
  • [sql] [bug]
    修复了一个  bug,即在没有传递“for_update=True”标志的情况下使用  server_onupdate=会将默认对象应用于  server_default,覆盖原有内容。这种用法不应该需要显式的 for_update=True  参数(尤其是文档中显示的示例没有使用它),因此现在在内部使用给定默认对象的副本,如果标志未设置为对应该参数的值。
    参考:#2631
  • [sql] [gae] [mysql]
    gaerdbms方言中添加了一个条件导入,尝试导入 rdbms_apiproxy 和 rdbms_googleapi 以在开发和生产平台上工作。现在也支持instance属性。感谢 Sean Lynch。还将允许用户名/密码以及修复从 0.8 版本开始的错误代码解释的增强功能回溯。
    参考:#2649

mysql

  • [mysql] [feature]
    在 OurSQL 方言中添加了“raise_on_warnings”标志。
    参考:#2523
  • [mysql] [feature]
    在 MySQLdb 方言中添加了“read_timeout”标志。
    参考:#2554

sqlite

  • [sqlite] [bug]
    对与 0.7.9 版本中发布的这个与 SQLite 相关的问题进行了进一步调整,以拦截反射外键时的传统 SQLite 引号字符。除了拦截双引号外,现在还拦截其他引号字符,如方括号、反引号和单引号。
    参考:#2568

mssql

  • [mssql] [bug]
    修复了一个 bug,即在 Column 中与拥有 Table 的“schema”一起使用“key”会由于 MSSQL 方言的“schema 渲染”逻辑未考虑.key 而无法定位结果行。
  • [mssql] [bug]
    在 mssql 信息模式中添加了一个 Py3K 条件,解决了 Py3k 中反射的问题。
    参考:#2638

oracle

  • [oracle] [bug]
    Oracle 的 LONG 类型,虽然是一个无界文本类型,但在返回结果行时似乎不使用 cx_Oracle.LOB 类型,因此方言已被修复以排除 LONG 应用 cx_Oracle.LOB 过滤。
    参考:#2620
  • [oracle] [bug]
    修复了在与 cx_Oracle 一起使用.prepare()时的 bug,以便返回值为False将导致不调用connection.commit(),从而避免“无事务”错误。已经证明在 SQLAlchemy 和 cx_oracle 中以一种基本方式工作两阶段事务,但受到与驱动程序观察到的警告的限制;查看文档以获取详细信息。
    参考:#2611
  • [oracle] [bug]
    更改了从setinputsizes()步骤中排除的  cx_oracle 类型列表,现在只包括 STRING 和 UNICODE;CLOB 和 NCLOB 已被移除。这是为了解决  cx_oracle 在 executemany()调用中存在问题的情况。在 0.8 版本中,同样的更改也被应用,但也可以通过  exclude_setinputsizes 参数进行配置。
    参考:#2561

0.7.9

发布日期:2012 年 10 月 01 日

orm

  • [orm] [bug]
    修复了主要局限于新的  AbstractConcreteBase 辅助程序的 bug,其中从超类继承的“type”属性不会在子类上被覆盖以生成“reserved for  base”错误消息,而是在那里放置一个无效的属性。这与使用 ConcreteBase  以及所有经典具体映射的行为不一致,其中多态基类的“type”列在子类上会被显式禁用,除非显式覆盖。
  • [orm] [bug]
    当 lazy='dynamic’与 uselist=False 组合时会发出警告。这在 0.8 中会引发异常。
  • [orm] [bug]
    修复了用户在相关对象赋值中的错误可能导致递归溢出的 bug,如果赋值触发了与同一目标上的双向属性同名的 backref,则会引发信息性错误。
  • [orm] [bug]
    修复了当 ORM 绑定“version”列时传递错误类型信息的 bug,当使用“version”功能时。测试由 Daniel Miller 提供。
    参考:#2539
  • [orm] [bug]
    在  Session.commit()中发生的“flush”中添加了额外的逻辑,以便在随后的 flush 中也刷新由 after_flush()或  after_flush_postexec()钩子添加的额外状态,然后“commit”完成。后续对 flush()的调用将继续,直到  after_flush 钩子停止添加新状态。在事件发生时,还有一个“overflow”计数器为 100,以防一个破损的  after_flush()钩子每次都添加新内容。
    参考:#2566

engine

  • [engine] [feature]
    事件系统的内存使用显著改善;在为特定类型的事件建立实例级监听器之前,不再为该事件创建实例级集合。
    参考:#2516
  • [engine] [bug]
    修复了一个 bug,即当 QueuePool 中有线程等待连接时,发生断开检测 + 丢弃会使这些线程在旧池的超时期间保持等待状态(如果禁用了超时,则会无限期等待)。修复现在使用一个特殊的异常情况通知这些等待线程,并使它们转移到新池中。
    参考:#2522
  • [engine] [bug]
    在 mysql/init.py 中添加了 gaerdbms 导入,缺少此导入会导致无法加载新的 GAE 方言。
    参考:#2529
  • [engine] [bug]
    修复了 cextension bug,即如果给定的索引是一个 Column 对象而不是字符串,则“模糊列错误”将无法正常工作。请注意,这里仍然存在一些列定位问题,在 0.8 中已经修复。
    参考:#2553
  • [engine] [bug]
    修复了 Enum 的 repr(),以包括 “name” 和 “native_enum” 标志。有助于 Alembic 自动生成。

sql

  • [sql] [bug]
    修复了 DropIndex 构造,以支持与远程模式中的表相关联的索引。
    参考:#2571
  • [sql] [bug]
    修复了 over() 构造中的 bug,即当将空列表传递给 partition_by 或 order_by 中的任意一个时,而不是 None,会导致生成失败。由 Gunnlaugur Þór Briem 提供。
    参考:#2574
  • [sql] [bug]
    修复了 CTE bug,即 CTE 中存在的位置绑定参数会破坏绑定参数的整体顺序。这主要影响支持位置绑定 + CTE 的 SQL Server 平台。
    参考:#2521
  • [sql] [bug]
    在  CTE 中修复了更多的不直观问题,这些问题阻止了在没有别名的情况下引用 CTE 中的自身联合。现在,CTE  根据名称唯一地呈现,仅呈现给定名称的最外层 CTE - 所有其他引用都只是名称。这甚至包括引用不同版本的同一 CTE 对象的其他  CTE/SELECT,比如对该 SELECT 或该 SELECT 的 UNION ALL 的其他 CTE/SELECT  的引用。在这种情况下,我们在对象标识和词法标识之间有些放松了通常的链接。两个不相关的 CTE 之间的真正名称冲突现在会引发错误。
  • [sql] [bug]
    在 common table expression 的 WITH RECURSIVE 子句中,对列名应用 quoting 规则,根据原始 Column 的 quoting 规则。
    参考:#2512
  • [sql] [bug]
    修复了 0.7.6 中引入的回归,即在某些“clone+replace”场景中,SELECT 语句的 FROM 列表可能不正确。
    参考:#2518
  • [sql] [bug]
    修复了一个 bug,即在嵌套子查询中使用 UNION 或类似操作会干扰结果列的定位,如果结果列与嵌套 UNION 中的某个名称相同,则会出现问题。
    参考:#2552
  • [sql] [bug]
    修复了自  0.6 以来的一个回归,涉及结果行定位。应该可以在其中使用基于字符串的列的 select()语句,即 select([‘id’,  ‘name’]).select_from(‘mytable’),并且可以通过具有这些名称的 Column 对象定位此语句;这是  query(MyClass).from_statement(some_statement)工作的机制。在某个时刻,使用  select([‘id’])的特定情况停止工作,这等同于  select([literal_column(‘id’)]),因此已重新实施并当然进行了测试。
    参考:#2558
  • [sql] [bug]
    在 ColumnOperators 基类中添加了缺失的 is_()和 isnot()操作符,使得这些长期可用的操作符以方法的形式存在,就像其他操作符一样。
    参考:#2544

postgresql

  • [postgresql] [bug]
    反射主键约束中的列现在按照约束本身定义它们的顺序返回,而不是表的顺序。感谢 Gunnlaugur Þór Briem。
    参考:#2531
  • [postgresql] [bug]
    将“terminating connection”��加到我们用于检测与 PG 断开连接的消息列表中,这在某些版本中似乎在服务器重新启动时出现。
    参考:#2570

mysql

  • [mysql] [bug]
    更新了 mysqlconnector 接口,使用了更新的“client flag”和“charset”API,感谢 David McNelis。

sqlite

  • [sqlite] [feature]
    添加了对 SQLite 中 localtimestamp() SQL 函数的支持,感谢 Richard Mitchell。
  • [sqlite] [bug]
    调整了一个非常古老的  bug 修复,尝试解决一个 SQLite 问题,该问题在 sqlite 3.6.14  中已经“修复”,涉及在使用“foreign_key_list” pragma  时表名周围的引号。修复已调整为不干扰实际在列或表名中的引号,尽可能地减少干扰;如果目标表的名称实际上在其名称中有引号(即“”“mytable”””),sqlite  仍然不会正确返回 foreign_key_list()的结果。
    参考:#2568
  • [sqlite] [bug]
    调整了列默认反射代码,将非字符串值转换为字符串,以适应旧的 SQLite 版本,这些版本不将默认信息作为字符串传递。
    参考:#2265

mssql

  • [mssql] [bug]
    修复了编译器错误,即在 ORDER BY 中使用相关子查询,如果语句还使用了 LIMIT/OFFSET,由于 ROW_NUMBER() OVER 子句中的错误渲染,将无法正确呈现。修复由 sayap 提供。
    参考:#2538
  • [mssql] [bug]
    修复了编译器错误,即如果给定的 select()具有“offset”属性,则在第二次编译时,构造将无法正确编译。
    参考:#2545
  • [mssql] [bug]
    修复了一个错误,即如果同一约束/表存在于多个模式中,则主键约束的反射会使列重复。

orm

  • [orm] [bug]
    修复了主要局限于新的  AbstractConcreteBase  助手的错误,其中从超类继承的“type”属性不会在子类上被覆盖,以产生“保留给基类”的错误消息,而是在那里放置一个无效属性。这与使用  ConcreteBase 以及所有经典具体映射的行为不一致,其中多态基类的“type”列在子类上会被显式禁用,除非显式覆盖。
  • [orm] [bug]
    当 lazy='dynamic’与 uselist=False 结合时,会发出警告。这在 0.8 中是一个异常。
  • [orm] [bug]
    修复了一个错误,即在相关对象赋值中的用户错误可能会导致递归溢出,如果赋值触发了与不正确类上的同名双向属性相同名称的 backref,则会引发一个信息性错误。
  • [orm] [bug]
    修复了一个错误,即当 ORM 绑定“version”列时,如果使用“version”功能,则会传递不正确的类型信息。测试由 Daniel Miller 提供。
    参考:#2539
  • [orm] [bug]
    在  Session.commit()中添加了额外的逻辑,使得在后续的 flush 中也会刷新由 after_flush()或  after_flush_postexec()钩子添加的额外状态,直到“commit”完成。后续对 flush()的调用将继续,直到  after_flush 钩子停止添加新状态。在“overflow”计数器达到 100 时,如果由于破损的  after_flush()钩子每次都添加新内容,则会触发。
    参考:#2566

engine

  • [engine] [feature]
    事件系统的内存使用显著改善;直到为该事件建立了实例级别的监听器,才会为特定类型的事件创建实例级别的集合。
    参考:#2516
  • [engine] [bug]
    修复了一个 bug,即当 QueuePool 中有线程等待连接时,断开检测 + 释放会使这些线程等待旧池的超时时间(或者如果禁用超时,则无限期等待)。现在修复通知这些等待者有一个特殊的异常情况,并让它们转移到新池。
    参考:#2522
  • [engine] [bug]
    在 mysql/init.py 中添加了 gaerdbms 导入,缺少此导入会导致无法加载新的 GAE 方言。
    参考:#2529
  • [engine] [bug]
    修复了 cextension 的 bug,当给定的索引是一个 Column 对象而不是一个字符串时,“模糊列错误”无法正常工作。请注意,这里仍然存在一些列定位问题,在 0.8 版本中已修复。
    参考:#2553
  • [engine] [bug]
    修复了 Enum 的 repr() 方法,包括“name”和“native_enum”标志。有助于 Alembic 的自动生成。

sql

  • [sql] [bug]
    修复了 DropIndex 构造以支持与远程模式中的表关联的索引。
    参考:#2571
  • [sql] [bug]
    修复了 over() 构造中的 bug,即将空列表传递给 partition_by 或 order_by,而不是 None,将无法正确生成。感谢 Gunnlaugur Þór Briem。
    参考:#2574
  • [sql] [bug]
    修复了 CTE 的 bug,即 CTE 本身中存在的位置绑定参数会破坏绑定参数的整体排序。这主要影响支持位置绑定 + CTE 支持的 SQL Server 平台。
    参考:#2521
  • [sql] [bug]
    修复了  CTE 中的更多不直观之处,这些不直观之处阻止了在不使用别名的情况下引用 CTE 自身的联合。CTE  现在根据名称唯一呈现,仅呈现给定名称的最外层 CTE - 所有其他引用只是作为名称呈现。这甚至包括引用同一 CTE 对象的其他  CTE/SELECT,例如引用该 SELECT 的 SELECT 或 UNION  ALL。在这种情况下,我们在对象标识和词法标识之间有些放松通常的链接。两个不相关的 CTE 之间的真实名称冲突现在会引发错误。
  • [sql] [bug]
    在通用表达式 WITH RECURSIVE 子句中,对列名应用引用规则,根据原始列的引用规则。
    参考:#2512
  • [sql] [bug]
    修复了在 0.7.6 版本中引入的回归,导致在某些“克隆+替换”场景中 SELECT 语句的 FROM 列表可能不正确。
    参考:#2518
  • [sql] [bug]
    修复了一个 bug,即在嵌套子查询中使用 UNION 或类似操作会干扰结果��定位,如果结果列与嵌套 UNION 中的名称相同,则会出现问题。
    参考:#2552
  • [sql] [bug]
    修复了自  0.6 以来的一个回归问题,涉及结果行定位。应该可以使用一个带有字符串列的 select() 语句,即 select([‘id’,  ‘name’]).select_from(‘mytable’),并且使这个语句可以被具有这些名称的 Column 对象定位;这是  query(MyClass).from_statement(some_statement) 的机制。在某个时候,使用  select([‘id’]) 的特定情况停止工作,这等同于  select([literal_column(‘id’)]),因此已经重新安装并当然测试。
    参考:#2558
  • [sql] [bug]
    添加了缺失的操作符 is_(),isnot() 到 ColumnOperators 基类,以便这些长期可用的操作符作为其他操作符一样作为方法存在。
    参考:#2544

postgresql

  • [postgresql] [bug]
    反射主键约束中的列现在按照约束本身定义的顺序返回,而不是表如何排序它们的顺序。感谢 Gunnlaugur Þór Briem。
    参考:#2531
  • [postgresql] [bug]
    将“terminating connection”添加到我们用于检测与 PG 断开连接的消息列表中,当服务器重新启动时,某些版本中似乎存在这种情况。
    参考:#2570

mysql

  • [mysql] [bug]
    更新了 mysqlconnector 接口,以使用更新的“client flag”和“charset” API,感谢 David McNelis。

sqlite

  • [sqlite] [feature]
    增加了对 SQLite 中实现的 localtimestamp() SQL 函数的支持,感谢 Richard Mitchell。
  • [sqlite] [bug]
    调整了一个非常古老的错误修复,尝试解决一个  SQLite 问题,该问题本身在 sqlite 3.6.14 中已经“修复”,涉及在使用“foreign_key_list” pragma  时围绕表名的引号。修复已经调整为不干扰实际上在列或表名中的引号,尽可能地;如果目标表实际上在其名称周围有引号,作为其名称的一部分(即“”“mytable”””),sqlite  仍然不会返回 foreign_key_list() 的正确结果。
    参考:#2568
  • [sqlite] [bug]
    调整了列默认反射代码,将非字符串值转换为字符串,以适应旧的 SQLite 版本,这些版本不将默认信息作为字符串传递。
    参考:#2265

mssql

  • [mssql] [bug]
    修复了编译器错误,其中在 ORDER BY 中使用相关子查询,如果语句还使用 LIMIT/OFFSET,由于在 ROW_NUMBER() OVER 子句中的错误渲染而无法正确呈现。修复来自 sayap。
    参考:#2538
  • [mssql] [bug]
    修复了编译器错误,即如果给定的 select()具有“offset”属性,则会修改该构造,导致第二次编译时构造不正确。
    参考:#2545
  • [mssql] [bug]
    修复了主键约束的反射错误,如果相同的约束/表存在于多个模式中,则会使列重复。

0.7.8

发布日期:2012 年 6 月 16 日星期六

orm

  • [orm] [feature]
    flush()的“objects”参数不再被弃用,因为已经确定了一些有效的用例。
  • [orm] [bug]
    修复了一个错误,即从多态映射到目标的 subqueryload()将为多态结果中遇到的每个不同类别调用一个新的查询。
    参��:#2480
  • [orm] [bug]
    修复了声明中的错误,其中连接表中的列的优先级(通常用于 id)如果列包含与其属性名称不同的名称,则会失败。这将导致针对实体属性进行的 primaryjoin 条件不正确。相关于这应该是那个的一部分,这是。
    参考:#1892#2491
  • [orm] [bug]
    修复了 identity_key()函数不接受标量参数作为标识的问题。
    参考:#2508
  • [orm] [bug]
    修复了 populate_existing 选项无法传播到子查询急加载器的错误。
    参考:#2497

engine

  • [engine] [bug]
    修复了 C 版本结果代理中的内存泄漏问题,其中对于结果行不提供纯 Python 元组的 DBAPI 将无法正确减少引用计数。受影响最严重的 DBAPI 是 pyodbc。
    参考:#2489
  • [engine] [bug]
    修复了影响 Py3K 的错误,即传递给 engine/connection execute()的字符串位置参数将无法正确解释,因为 Py3K 字符串上存在 iter
    参考:#2503

sql

  • [sql] [bug]
    将 BIGINT 添加到 types.all,将 BIGINT、BINARY、VARBINARY 添加到 sqlalchemy 模块命名空间,以及确保不再发生此类破坏的测试。
    参考:#2499
  • [sql] [bug]
    修复了当 SELECT 语句包含 UNION 或其他复合表达式时,公共表达式的正确渲染,感谢 btbuilder。
    参考:#2490
  • [sql] [bug]
    修复了在克隆的 select() 构造上 append_column() 无法正确运行的错误。由 Gunnlaugur Þór Briem 提供。
    参考:#2482

postgresql

  • [postgresql] [bug]
    移除了在反射枚举时不必要的表子句。由 Gunnlaugur Þór Briem 提供。
    参考:#2510

mysql

  • [mysql] [feature]
    添加了一个用于 Google App Engine 的新方言。由 Richie Foreman 提供。
    参考:#2484

oracle

  • [oracle] [bug]
    向 oracle.* 添加了 ROWID。
    参考:#2483

orm

  • [orm] [feature]
    flush() 的 ‘objects’ 参数不再被弃用,因为已经确定了一些有效的用例。
  • [orm] [bug]
    修复了从多态映射到目标的 subqueryload() 会为多态结果中遇到的每个不同类别重新调用查询的错误。
    参考:#2480
  • [orm] [bug]
    修复了在声明中,对于连接表的复合列(通常用于 id)中列的优先级不正确的错误,如果列的名称与其属性名称不同,将导致像针对实体属性制定的 primaryjoin 条件不正确。这与此相关,应该是其中的一部分,这是。
    参考:#1892, #2491
  • [orm] [bug]
    修复了 identity_key() 函数不接受标量参数作为标识的问题。
    参考:#2508
  • [orm] [bug]
    修复了 populate_existing 选项无法传播到子查询急加载器的错误。
    参考:#2497

engine

  • [engine] [bug]
    修复了 C 版本的结果代理中的内存泄漏问题,即不提供纯 Python 元组用于结果行的 DBAPI 无法正确减少引用计数的问题。受影响最严重的 DBAPI 是 pyodbc。
    参考:#2489
  • [engine] [bug]
    修复了影响 Py3K 的 bug,即传递给 engine/connection execute() 的字符串位置参数无法正确解释的问题,因为 Py3K 字符串上存在 iter
    参考:#2503

sql

  • [sql] [bug]
    向 types.all 添加了 BIGINT,向 sqlalchemy 模块命名空间添加了 BIGINT、BINARY、VARBINARY,并添加了测试以确保不再发生此类破坏。
    参考:#2499
  • [sql] [bug]
    修复了当 SELECT 语句包含 UNION 或其他复合表达式时,公共表达式渲染无法正确运行的问题。由 btbuilder 提供。
    参考:#2490
  • [sql] [bug]
    修复了在克隆的 select() 构造上不会正确运行 append_column() 的错误,由 Gunnlaugur Þór Briem 提供。
    参考:#2482

postgresql

  • [postgresql] [bug]
    移除了在反射枚举时不必要的表子句,由 Gunnlaugur Þór Briem 提供。
    参考:#2510

mysql

  • [mysql] [feature]
    添加了 Google App Engine 的新方言。由 Richie Foreman 提供。
    参考:#2484

oracle

  • [oracle] [bug]
    将 ROWID 添加到 oracle.*。
    参考:#2483


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

相关文章
|
8月前
|
人工智能 安全 Java
掌握 Spring 中的 WebClient
本文介绍了 Spring Boot 开发中 WebClient 的使用场景及优势。WebClient 是非阻塞响应式 Web 客户端,适合高并发、流式数据处理和微服务通信。它支持事件驱动架构、大文件传输、超时重试机制,并可与 OAuth2 集成实现安全通信。相比 RestTemplate,WebClient 提供更高效的资源利用和灵活的并发处理能力,适用于现代响应式应用开发。文中通过代码示例详细对比了两者的区别,展示了 WebClient 在异步编程中的强大功能。
1111 0
|
存储 Kubernetes 监控
深入浅出分布式事务:理论与实践
在数字化时代的浪潮中,分布式系统如同星辰大海般浩瀚而深邃。本文将带你航行于这片星辰大海,探索分布式事务的奥秘。我们将从事务的基本概念出发,逐步深入到分布式事务的核心机制,最后通过一个实战案例,让你亲自体验分布式事务的魅力。让我们一起揭开分布式事务的神秘面纱,领略其背后的科学与艺术。
278 32
|
SQL 缓存 关系型数据库
SqlAlchemy 2.0 中文文档(三十五)(2)
SqlAlchemy 2.0 中文文档(三十五)
225 2
|
设计模式 负载均衡 Java
Feign如何设置超时时间,不同情况还真不一样,别设置错了
大家好,我是三友~~ 今天来聊一聊前段时间看到的一个面试题,也是在实际项目中需要考虑的一个问题,Feign的超时时间如何设置? Feign的超时时间设置方式并不固定,它取决于Feign在项目中是如何使用的,不同的使用方式,超时时间设置方式也不大相同,甚至还可能有坑。
Feign如何设置超时时间,不同情况还真不一样,别设置错了
|
存储 缓存 Java
使用@Cacheable,缓存优化的方式优化数据库的查询
使用@Cacheable,缓存优化的方式优化数据库的查询
1254 0
|
机器学习/深度学习 算法 数据挖掘
基于双目图像三维建模算法的测量目标物体体积计算matlab仿真
基于双目图像三维建模算法的测量目标物体体积计算matlab仿真
726 0
|
12天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
8天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
4797 13
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手