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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
简介: SqlAlchemy 2.0 中文文档(六十五)

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


0.8.0b1

发布日期:2012 年 10 月 30 日

通用

  • [通用] [移除]
    完全移除了“sqlalchemy.exceptions”作为“sqlalchemy.exc”的同义词。
    参考:#2433
  • [通用]
    SQLAlchemy 0.8 现在针对 Python 2.5 及以上版本。不再支持 Python 2.4。

orm

  • [orm] [特性]
    relationship()  的主要重写允许加入条件,其中包括指向自身的列在复合外键内。添加了一个新的非常专业化的 primaryjoin 条件的  API,允许在需要时在表达式内联中放置注释函数 remote() 和 foreign() 来处理基于 SQL 函数、CAST  等的条件。之前使用半私有 _local_remote_pairs 方法的配方可以升级到这种新方法。
    另见
    重写的 _orm.relationship() 机制
    参考:#1401
  • [orm] [特性]
    新的独立函数 with_polymorphic() 提供了 query.with_polymorphic() 功能的独立形式。它可以应用于查询中的任何实体,包括作为“of_type()”修改器的目标进行连接。
    参考:#2333
  • [orm] [特性]
    属性上的  of_type() 结构现在也接受别名化的类构造以及 with_polymorphic 结构,并且可以与  query.join()、any()、has() 以及也包括 eager loaders  subqueryload()、joinedload()、contains_eager()
    参考:#1106#2438
  • [orm] [特性]
    对映射类的事件监听进行改进,允许指定未映射类用于实例和映射器事件。当传递 propagate=True 标志时,建立的事件将自动设置在该类的子类上,如果最终映射了该类,则事件将为该类本身设置。
    参考:#2585
  • [orm] [feature]
    “延迟声明式反射”系统已经移入声明式扩展本身,使用新的 DeferredReflection 类。该类现在已经针对单表和联合表继承用例进行了测试。
    参考:#2485
  • [orm] [feature]
    添加了新的核心函数“inspect()”,它作为对映射器、对象等进行内省的通用入口。Mapper 和 InstanceState 对象已经增强了公共 API,允许检查映射属性,包括针对列绑定或关系绑定属性的过滤器,检查当前对象状态,属性历史记录等。
    参考:#2208
  • [orm] [feature]
    在  session.begin_nested() 中调用 rollback() 现在只会使那些在该事务范围内具有净变化的对象过期,即在 flush  时被标记为脏或被修改的对象。这允许 begin_nested() 的典型用例,即修改一小部分对象,保留未在子事务中修改的较大对象集的数据。
    参考:#2452
  • [orm] [feature]
    添加了实用功能 Session.enable_relationship_loading(),取代了 relationship.load_on_pending。然而,应避免使用这两个功能。
    参考:#2372
  • [orm] [feature]
    添加了对 column_property()、relationship()、composite() 的 .info 字典参数支持。所有 MapperProperty 类都具有可用的自动创建的 .info 字典。
  • [orm] [feature]
    从映射集合中添加/移除 None 现在会生成属性事件。以前,在某些情况下,None 追加会被忽略。相关内容。
    参考:#2229
  • [orm] [feature]
    映射集合中存在 None 现在在 flush 期间会引发错误。以前,集合中的 None 值会被静默忽略。
    参考:#2229
  • [orm] [feature]
    现在更宽松地支持查询的  update() 方法所更新的表。现在更好地支持普通的 Table 对象,还可以使用 joined-inheritance 子类来进行  update(); 子类表将是更新的目标,如果在 WHERE 子句中引用了父表,则编译器将调用 UPDATE…FROM  语法(如果方言允许)来满足 WHERE 子句。如果在“values”字典中以对象指定列,则还支持 MySQL 的多表更新功能。PG 的  DELETE…USING 在核心中还不可用。
  • [orm] [功能]
    新的会话事件 after_transaction_create 和 after_transaction_end 允许跟踪新的 SessionTransaction 对象。如果检查了对象,可以确定会话何时首次处于活动状态以及何时停用。
  • [orm] [功能]
    查询现在可以加载包含非可哈希类型的实体/标量混合“元组”行,方法是在使用的相应 TypeEngine 对象上设置标志“hashable=False”。返回不可哈希类型(通常是列表)的自定义类型可以将此标志设置为 False。
    参考资料:#2592
  • [orm] [功能]
    查询现在默认情况下“自动关联”,方式与 select() 一样。以前,在另一个查询中使用的查询作为子查询时,需要显式调用 correlate() 方法,以便将内部的表与外部关联起来。像往常一样,correlate(None) 禁用关联。
    参考资料:#2179
  • [orm] [功能]
    现在在对象在  Session.add()、Session.merge() 等中建立在 Session.new 或 Session.identity_map  中后,会发出 after_attach 事件,以便在调用事件时这些集合中表示对象。添加了 before_attach  事件以适应需要在预附加对象中进行自动刷新的用例。
    参考资料:#2464
  • [orm] [功能]
    当在  flush 的“execute”部分使用不支持的方法时,会产生警告。这些方法包括熟悉的 add()、delete() 等,以及在 mapper  级别的 flush 事件中调用的集合和相关对象操作,如 after_insert()、after_update()  等。长期以来,明确记录了当在 flush 计划的执行中操纵 Session 时,SQLAlchemy  不能保证结果,但是用户仍然在这样做,所以现在有了一个警告。也许将来 Session 将被增强以支持在 flush  中执行这些操作,但目前不能保证结果。
  • [orm] [功能]
    ORM 实体可以传递到核心的 select() 构造中,以及传递到 select() 的 select_from()、correlate() 和 correlate_except() 方法中,它们将被解包为可选择的对象。
    参考资料:#2245
  • [orm] [功能]
    一些支持根据映射属性自动渲染关系连接条件,使用核心  SQL 构造。例如 select([SomeClass]).where(SomeClass.somerelationship) 将渲染  SELECT from “someclass” 并将 “somerelationship”的 primaryjoin 作为 WHERE  子句。这改变了在核心 SQL  上下文中使用“SomeClass.somerelationship”时的先前含义;先前,它将“解析”为父可选择的内容,这通常不是有用的。在  query.filter() 中也起作用。相关链接。
    参考文献:#2245
  • [orm] [feature]
    声明性基础(declarative_base())中类的注册表现在是 WeakValueDictionary。因此,“Base”的子类如果被解除引用,将会被垃圾收集,如果它们不被任何其他映射器/超类映射器引用。参见本票据的下一个说明。
    参考文献:#2526
  • [orm] [feature]
    单继承声明性子类之间的列冲突,无论是否使用混合类,都可以使用文档中描述的新的@declared_attr 用法来解决。
    参考文献:#2472
  • [orm] [feature]
    declared_attr 现在可以在非混合类上使用,尽管这通常仅对单继承子类列冲突解决有用。
    参考文献:#2472
  • [orm] [feature]
    declared_attr 现在可以与不是 Column 或 MapperProperty 的属性一起使用;包括任何用户定义的值以及关联代理对象。
    参考文献:#2517
  • [orm] [feature]
    非常有限地支持继承映射器在类本身被解引用时被 GC 回收。映射器不能有自己的表(即只有单个表继承),而没有多态属性的情况。这允许了这样一种用例:创建一个声明性映射类的临时子类,在没有自己的表或映射指令的情况下,通过单元测试的解引用进行垃圾收集。
    参考文献:#2526
  • [orm] [feature]
    声明性现在维护一个按字符串名称和完整模块限定名称注册的类的注册表。现在可以基于关系(relationship())中的模块限定字符串查找具有相同名称的多个类。简单类名查找,当有多个类共享相同名称时,现在会引发一个信息性的错误消息。
    参考文献:#2338
  • [orm] [feature]
    现在可以提供绑定到类的属性,这些属性可以覆盖任何非 ORM 类型的列,而不仅仅是描述符。
    参考文献:#2535
  • [orm] [feature]
    添加了 with_labels 和 reduce_columns 关键字参数到 Query.subquery(),以提供两种产生具有唯一命名列的查询的替代策略。
    参考:#1729
  • [orm] [feature]
    当对一个已经由于过期/属性刷新/集合替换而不再与父类关联的受监控集合进行附加或移除操作时,会发出警告。
    参考:#2476
  • [orm] [bug]
    如果两个表通过联合继承相关,并且 FK 依赖关系不是继承条件的一部分,则 ORM 在刷新期间会进行额外的努力来确定这种 FK 依赖关系不重要,从而节省用户使用 use_alter 指令的必要性。
    参考:#2527
  • [orm] [bug]
    现在,仅对被分配为监听器的类的后代类触发  instrumentation events class_instrument()、class_uninstrument()和  attribute_instrument()。以前,无论传递了什么“目标”参数,事件监听器都会被分配为在所有情况下监听所有类。
    参考:#2590
  • [orm] [bug]
    在发送多级子类的任意顺序或中间类缺失的情况下,with_polymorphic()会按正确顺序生成 JOIN,并且具有正确的继承表。
    参考:#1900
  • [orm] [bug]
    改进了处理共享共同基类的子类实体链的 joined/subquery eager loading,没有提供特定的“join depth”。在检测到“循环”之前,将单独链接到每个子类映射器,而不是考虑基类为“循环”的源。
    参考:#2481
  • [orm] [bug]
    Session.is_modified()上的“passive”标志不再起作用。在所有情况下,is_modified()只查看本地内存中的修改标志,不会发出任何 SQL 或调用加载器可调用/初始化程序。
    参考:#2320
  • [orm] [bug]
    当在没有设置 single-parent=True 的情况下使用 delete-orphan 级联时,发出的警告现在是一个错误。在任何情况下,ORM 在此警告后将无法正常工作。
    参考:#2405
  • [orm] [bug]
    在  flush 事件中发出的延迟加载,如  before_flush()、before_update()等,现在将像在非事件代码中一样运行,考虑到在延迟加载查询中使用的 PK/FK  值。以前,会建立特殊标志,导致延迟加载基于在 flush 中调用时父 PK/FK  值的“先前”值加载相关项目;现在,以这种方式加载的信号局限于工作单元实际需要以这种方式加载的地方。请注意,UOW 有时会在调用  before_update()事件之前加载这些集合,因此“passive_updates”的使用与否可能会影响在 flush  事件中访问时集合是否表示“旧”或“新”数据,根据延迟加载的发出时间。这种更改在极小的情况下是不兼容的,用户事件代码依赖于旧行为。
    参考:#2350
  • [orm] [错误]
    继续关于由于事件监听器导致  flush 后的额外状态;从属性角度标记为“脏”的任何状态,通常通过在  after_insert()、after_update()等中设置列属性事件,现在在所有情况下都将“历史”标志重置,而不仅仅是那些在 flush  中的实例。这样做的效果是,这种“脏”状态在 flush 后不会传递,并且不会导致 UPDATE 语句。会发出相应的警告;可以使用  set_committed_state()方法在对象上分配属性而不产生历史事件。
    参考:#2566, #2582
  • [orm] [错误]
    修复了在混合类中逐渐出现的@declared_attr 列和直接定义列之间的断开连接。在这两种情况下,列将被应用于声明类的表,但不会应用于连接继承子类的表。以前,直接定义的列会被放在基表和子表上,这通常不是所期望的。
    参考:#2565
  • [orm] [错误]
    当父类本身映射到 join()或 select()语句时,声明可以将在单表继承子类上声明的列传播到父类的表,直接或通过连接继承,而不仅仅是一个表。
    参考:#2549
  • [orm] [错误]
    当 uselist=False 与“dynamic”加载器结合时会发出错误。这在 0.7.9 中是一个警告。
  • [orm] [已移除]
    ORM  的传统“可变”系统已移除,包括 MutableType 类以及 PickleType 和 postgresql.ARRAY 上的  mutable=True 标志。ORM 使用 sqlalchemy.ext.mutable 扩展来检测原地变异,该扩展是在 0.7  版本中引入的。MutableType 和相关结构的移除从 SQLAlchemy  的内部删除了大量复杂性。这种方法的性能表现不佳,因为在使用时会扫描 Session 的全部内容。
    参考:#2442
  • [ORM] [已移除]已弃用的标识符已移除:
  • allow_null_pks mapper() 参数(使用 allow_partial_pks)
  • _get_col_to_prop() 映射方法(使用 get_property_by_column())
  • dont_load 参数已移除至 Session.merge()(使用 load=True)
  • sqlalchemy.orm.shard 模块(使用 sqlalchemy.ext.horizontal_shard)
  • [ORM] [移动]
    InstrumentationManager  接口和整个相关的交替类实现系统现已移动到  sqlalchemy.ext.instrumentation。这是一个很少使用的系统,它增加了类仪器化的复杂性和开销。新的架构允许它保持未使用状态,直到实际导入  InstrumentationManager 时,此时它将被引导到核心中。

示例

  • [示例]
    Beaker 缓存示例已转换为使用 dogpile.cache。这是一个由 Beaker 缓存内部的相同创建者编写的新缓存库,代表了一个大大改进、简化和现代化的缓存系统。
    另请参阅
    狗窝缓存
    参考:#2589

引擎

  • [引擎] [功能]
    现在,连接事件侦听器可以与单个 Connection 对象关联,而不仅仅是 Engine 对象。
    参考:#2511
  • [引擎] [功能]
    before_cursor_execute 事件触发所谓的“_cursor_execute”事件,这些事件通常是特殊情况下执行的主键绑定序列和不使用 RETURNING 时调用的默认生成 SQL 短语。
    参考:#2459
  • [引擎] [功能]
    测试套件使用的库已经稍作调整,使其再次成为  SQLAlchemy 的一部分。此外,新的测试套件现在在新的 sqlalchemy.testing.suite  包中。这是一个正在开发中的系统,希望为外部方言提供一个通用的测试套件。在 SQLAlchemy  外部维护的方言可以使用新的测试装置作为其自己测试的框架,并且将免费获得一个“兼容性”方言测试套件,其中包括一个改进的“要求”系统,其中可以为测试启用或禁用特定功能和特性。
  • [引擎] [功能]
    添加了一种新的在进程中注册新方言的系统,而无需使用入口点。请参阅“注册新方言”文档。
    参考:#2462
  • [engine] [feature]
    如果在 bindparam()中未显式传递“value”或“callable”参数,则“required”标志默认设置为 True。这将导致语句执行检查参数是否存在于最终绑定参数集合中,而不是隐式分配为 None。
    参考:#2556
  • [engine] [feature]
    对“dialect”API 进行了各种 API 调整,以更好地支持高度专业化的系统,如 Akiban 数据库,包括更多的钩子以允许执行上下文访问类型处理器。
  • [engine] [feature]
    Inspector.get_primary_keys()已被弃用;请使用 Inspector.get_pk_constraint()。感谢 Diana Clarke。
    参考:#2422
  • [engine] [feature]
    添加了一个名为“utils”的新 C 扩展模块,用于在有时间实现时提供额外的函数加速。
  • [engine] [bug]
    Inspector.get_table_names()的 order_by=”foreign_key”功能现在按照依赖关系表先排序,以与 util.sort_tables 和 metadata.sorted_tables 保持一致。
  • [engine] [bug]
    修复了一个 bug,即如果数据库重新启动影响了多个连接,每个连接都会单独调用池的新处理,尽管只需要一个处理。
    参考:#2522
  • [engine] [bug]
    select().apply_labels()的.c.属性上列的名称现在基于而不是,对于那些具有明确定义的.key 的列。
    参考:#2397
  • [engine] [bug]
    当  Table 上的 autoload_replace 标志为 False 时,将跳过任何反射的外键约束,这些约束引用已声明的列,假设在  Python 中声明的列将接管指定在 Python 中的 ForeignKey 或 ForeignKeyConstraint 声明的任务。
  • [engine] [bug]
    ResultProxy  方法  inserted_primary_key、last_updated_params()、last_inserted_params()、postfetch_cols()、prefetch_cols()都断言给定的语句是一个已编译的构造,并且是一个适当的  insert()或 update()语句,否则会引发 InvalidRequestError。
    参考:#2498
  • [engine]
    ResultProxy.last_inserted_ids 已被移除,替换为 inserted_primary_key。

sql

  • [sql] [feature]
    Engine添加了一个新方法Engine.execution_options()。此方法的工作方式与Connection.execution_options()类似,它创建一个指向新选项集的父对象的副本。该方法可用于构建每个引擎共享相同底层连接池的分片方案。该方法已针对 ORM 中的水平分片配方进行了测试。
    另见
    Engine.execution_options()
  • [sql] [feature]
    核心操作系统的重大改进,允许在类型级别重新定义现有操作符以及添加新操作符。可以从现有类型创建新类型,这些新类型添加或重新定义了导出到列表达式的操作,类似于  ORM 允许的比较器工厂。新的架构将此功能移至核心,以便在所有情况下都可以一致使用,并且使用现有的类型传播行为进行清晰传播。
    参考:#2547
  • [sql] [feature]
    为了补充,类型现在可以提供“绑定表达式”和“列表达式”,允许在每列或每绑定级别的语句中进行  SQL 表达式的编译时注入。这适用于类型需要在 SQL 级别而不是在 Python 级别增强绑定和结果行为的用例。允许透明加密/解密、使用  PostGIS 函数等方案。
    参考:#1534, #2547
  • [sql] [feature]
    核心操作系统现在包括 getitem 操作符,即 Python 中的括号操作符。首先,这用于为 PostgreSQL ARRAY 类型提供索引和切片行为,并且还提供了一个钩子,用于终端用户定义自定义 getitem 方案,这些方案可以应用于类型级别以及 ORM 级别的自定义操作符方案。还支持 lshift(<<)和 rshift(>>)作为可选操作符。
    请注意,此更改的效果是,ORM 与 synonym()或其他“描述符包装”方案一起使用的基于描述符的 getitem 方案将需要开始使用自定义比较器以维护此行为。
  • [sql] [feature]
    修订了用于确定用户定义运算符的运算符优先级的规则,即使用 op() 方法授予的运算符。以前,在所有情况下都应用最小的优先级,现在默认优先级为零,低于所有运算符,除了“逗号”(例如,在 func 调用的参数列表中使用)和“AS”,并且还可以通过 op() 方法上的“precedence”参数进行自定义。
    参考:#2537
  • [sql] [特性]
    对所有 String 类型添加了“collation”参数。当存在时,呈现为 COLLATE 。这是为了支持现在多个数据库(包括 MySQL、SQLite 和 PostgreSQL)支持的 COLLATE 关键字。
    参考:#2276
  • [sql] [特性]
    现在可以通过将 operators.custom_op() 与 UnaryExpression() 结合使用来使用自定义一元运算符。
  • [sql] [特性]
    增强了 GenericFunction 和 func.,允许通过类名自动在 func. 命名空间中使用用户定义的 GenericFunction 子类,可选择使用包名,以及具有在 func.* 中的标识名不同于渲染名的功能。
  • [sql] [特性]
    现在,cast() 和 extract() 结构也将通过 func.* 访问器生成,因为用户自然会尝试从 func.* 访问这些名称,即使返回的对象不是 FunctionElement,也应该做出预期的操作。
    参考:#2562
  • [sql] [特性]
    现在可以使用新的 inspect() 服务获取 Inspector 对象的实例。
    参考:#2208
  • [sql] [特性]
    现在 column_reflect 事件接受 Inspector 对象作为第一个参数,位于“table”之前。使用这个非常新的事件的 0.7 版���的代码将需要修改以添加“inspector”对象作为第一个参数。
    参考:#2418
  • [sql] [特性]
    现在结果集中列的定位行为默认区分大小写。多年来,SQLAlchemy  会对这些值进行不区分大小写的转换,可能是为了缓解像 Oracle 和 Firebird  这样的方言早期大小写敏感性问题。这些问题在更现代的版本中已经更清晰地解决,因此在标识符上调用 lower() 的性能损失已被移除。可以通过在  create_engine() 上设置“case_insensitive=False”来重新启用不区分大小写的比较。
    参考:#2423
  • [sql] [特性]
    当在 insert.values() 或 update.values() 中存在不在目标表中的键时,现在“未使用的列名”警告已更改为异常。
    参考:#2415
  • [sql] [特性]
    为 ForeignKey、ForeignKeyConstraint 添加了“MATCH”子句,感谢 Ryan Kelly。
    参考:#2502
  • [sql] [feature]
    添加了对从表的别名进行的 DELETE 和 UPDATE 的支持,这些表可能在查询中的其他地方与自身关联,由 Ryan Kelly 提供。
    参考:#2507
  • [sql] [feature]
    select() 现在具有 correlate_except() 方法,自动关联除传递的其他所有可选择项。
  • [sql] [feature]
    prefix_with() 方法现在可在每个 select()、insert()、update()、delete() 上使用,具有相同的 API,接受多个前缀调用,以及“方言名称”,以便将前缀限制为一种方言。
    参考:#2431
  • [sql] [feature]
    将  reduce_columns() 方法添加到 select() 构造中,使用 util.reduce_columns  实用函数内联替换列以删除等效列。reduce_columns()  还添加了“with_only_synonyms”,以限制只减少具有相同名称的列。移除了已弃用的 fold_equivalents() 功能。
    参考:#1729
  • [sql] [feature]
    重新设计了 startswith()、endswith()、contains() 运算符,以更好地处理否定(NOT LIKE),并在编译时将它们组装起来,以便其生成的 SQL 可以被修改,比如在 Firebird STARTING WITH 的情况下。
    参考:#2470
  • [sql] [feature]
    向渲染 CREATE TABLE 的系统添加了一个钩子,通过针对新的 schema.CreateColumn 构造一个 @compiles 函数,为每个列提供访问渲染的功能。
    参考:#2463
  • [sql] [feature]
    “标量”选择现在具有 WHERE 方法,以帮助进行生成性构建。此外,在 SS “关联”列的方法上进行了轻微调整;新方法不再将含义应用于所选择的基础表列。这改进了一些相当微妙的情况,而且原有的逻辑似乎没有任何目的。
  • [sql] [feature]
    当首次使用构造为引用多个远程表的 ForeignKeyConstraint() 时,将会明确引发错误。
    参考:#2455
  • [sql] [feature]
    ColumnOperators.notin_()ColumnOperators.notlike()ColumnOperators.notilike() 添加到 ColumnOperators 中。
    参考:#2580
  • [sql] [change]
    Text() 类型呈现给定的长度,如果指定了长度。
  • [sql] [changed]
    expression.sql  中的大多数类不再以下划线开头,即  Label、SelectBase、Generative、CompareMixin。_BindParamClause 也被重命名为  BindParameter。这些类的旧下划线名称将在可预见的未来保持可用。
  • [sql] [bug]
    修复了将关键字参数传递给 Compiler.process() 时,不会将这些参数传播到 SELECT 语句的 columns 子句中的列表达式的 bug。特别是在使用依赖于特殊标志的自定义编译方案时,这会出现问题。
    参考:#2593
  • [sql] [bug] [orm]
    select() 的自相关特性,以及由此导致的 Query 的自相关特性,对于直接在封闭的 SELECT 的 FROM 列表中呈现的 SELECT 语句不会生效。在 SQL 中,自相关仅适用于诸如 WHERE、ORDER BY、columns 子句中的列表达式。
    参考:#2595
  • [sql] [bug]
    对列优先级进行了微调,将 “concat” 和 “match” 操作符移到了与 “is”、“like” 等操作符相同的位置;这有助于在与 “IS” 结合使用时进行括号渲染。
    参考:#2564
  • [sql] [bug]
    对使用标签将列表达式应用于选择语句的操作进行了调整,无论是否有其他修改构造,都不再将该表达式“定位”到底层  Column;这会影响依赖于 Column 定位以检索结果的 ORM 操作。也就是说,像 query(User.id,  User.id.label(‘foo’)) 这样的查询现在将分别跟踪每个 “User.id”  表达式的值,而不是将它们混合在一起。预计不会影响任何用户;但是,如果使用 select() 结合 query.from_statement()  并尝试加载完全组合的 ORM 实体,则可能会出现问题,因为 select() 将不再将带有任意 .label() 名称的 Column  对象定位到该实体映射的 Column 对象。
    参考:#2591
  • [sql] [bug]
    修复了将 Column 的 “default” 参数解释为可调用对象时不将 ExecutionContext 传递给关键字参数的问题。
    参考:#2520
  • [sql] [bug]
    所有的  UniqueConstraint、ForeignKeyConstraint、CheckConstraint 和  PrimaryKeyConstraint 在直接引用绑定到表的 Column  对象(即不仅仅是字符串列名)并且只引用一个表时,都会自动附加到它们的父表上。在 0.8 之前,这种行为发生在 UniqueConstraint 和  PrimaryKeyConstraint 上,但不是 ForeignKeyConstraint 或 CheckConstraint。
    参考:#2410
  • [sql] [错误]
    TypeDecorator 现在默认包含一个基于 “impl” 类型的通用 repr()。对于那些指定了自定义 init 方法的 TypeDecorator 类来说,这是一个行为变化;如果这些类型需要 repr() 提供忠实的构造函数表示,则需要重新定义 repr()。
    参考:#2594
  • [sql] [错误]
    column.label(None) 现在生成一个匿名标签,而不是返回列对象本身,与 label(column, None) 的行为一致。
    参考:#2168
  • [sql] [已移除]
    create_engine() 以及 String 上的长期弃用且无效的 assert_unicode 标志已被移除。

postgresql

  • [postgresql] [功能]
    postgresql.ARRAY 现在具有可选的 “dimension” 参数,将为数组分配特定数量的维度,这将在 DDL 中呈现为 ARRAY[][]…,还改善了绑定/结果处理的性能。
    参考:#2441
  • [postgresql] [功能]
    postgresql.ARRAY  现在支持索引和切片。Python 的 [] 操作符在所有类型为 ARRAY 的 SQL  表达式上都可用;可以传递整数或简单切片。这些切片也可以在 UPDATE 语句的 SET 子句中的赋值方面使用,方法是将它们传递给  Update.values();有关示例,请参阅文档。
  • [postgresql] [功能]
    添加了新的 “数组字面量” 构造 postgresql.array()。基本上是一个呈现为 ARRAY[1,2,3] 的 “元组”。
  • [postgresql] [功能]
    添加了对 PostgreSQL ONLY 关键字的支持,该关键字可以在 SELECT、UPDATE 或 DELETE 语句中对应一个表出现。该短语是使用 with_hint() 建立的。感谢 Ryan Kelly
    参考:#2506
  • [postgresql] [功能]PostgreSQL  方言的 “ischema_names” 字典是 “非官方” 可自定义的。这意味着,可以将新类型(例如 PostGIS  类型)添加到该字典中,并且 PG 类型反射代码应该能够处理具有可变数量参数的简单类型。这里的功能性是 “非官方的” ,有三个原因:
  1. 这不是一个 “官方” API。理想情况下,一个 “官方” API 应该允许在方言或全局级别以一种通用方式添加自定义类型处理可调用对象。
  2. 这仅针对 PG 方言实现,特别是因为 PG 对自定义类型有广泛支持,与其他数据库后端不同。真正的 API 将在默认方言级别实现。
  3. 此处的反射代码仅针对简单类型进行了测试,可能在更复杂类型上存在问题。
  • 补丁由Éric Lemoine 提供。

mysql

  • [mysql] [feature]
    将 TIME 类型添加到 mysql 方言中,接受“fst”参数,这是最近 MySQL 版本的新“分数秒”指定符。数据类型将解释从驱动程序接收的微秒部分,但请注意,目前大多数/所有 MySQL DBAPI 不支持返回此值。
    参考:#2534
  • [mysql] [bug]
    方言在首次连接时不再发出昂贵的服务器排序查询,以及服务器大小写查询。这些功能仍然作为半私有功能可用。
    参考:#2404

sqlite

  • [sqlite] [feature]
    SQLite 的日期和时间类型已经进行了全面改进,以支持更开放的输入和输出格式,使用基于名称的格式字符串和正则表达式。新参数“microseconds”还提供了省略时间戳中的“微秒”部分的选项。感谢 Nathan Wright 在此方面的工作和测试。
    参考:#2363
  • [sqlite]
    NCHARNVARCHAR添加到 SQLite 方言的已识别类型名称列表中以供反射使用。SQLite 返回给定类型的名称作为返回的名称。
    参考:rc3addcc9ffad

mssql

  • [mssql] [feature]
    SQL Server  方言可以给出数据库限定的模式名称,即“schema=‘mydatabase.dbo’”;反射操作将检测到这一点,将模式分割在“.”之间以单独获取所有者,并在反射目标内部发出“USE  mydatabase”语句;然后恢复从 DB_NAME()返回的现有数据库。
  • [mssql] [feature]
    更新了对 mxodbc 驱动程序的支持;建议使用 mxodbc 3.2.1 以获得完全兼容性。
  • [mssql] [bug]
    移除了旧版本行为,即通过==与标量 SELECT 进行列比较会强制转换为 SQL 服务器方言的 IN。这是隐式行为,在其他情况下会失败,因此被移除。依赖此行为的代码需要修改为显式使用 column.in_(select)。
    参考:#2277

oracle

  • [oracle] [feature]
    可以通过将排除的字符串 DBAPI  类型名称列表发送到 exclude_setinputsizes 方���参数来自定义不包括在  setinputsizes()集中的列的类型。此列表以前是固定的。该列表现在默认为 STRING、UNICODE,移除了 CLOB、NCLOB。
    参考:#2561
  • [oracle] [bug]
    当生成同名绑定参数到 bindparam()对象时,现在会从具有 quote=True 的 Column 中传递引用信息,就像在生成的 INSERT 和 UPDATE 语句中一样,以便完全支持未知的保留名称。
    参考:#2437
  • [oracle] [bug]
    在 Oracle 中,CreateIndex 构造现在将索引的名称模式限定为父表的名称。以前,此名称被省略,显然会在默认模式中创建索引,而不是表的模式。

杂项

  • [feature] [access]
    MS Access 方言已移至 Bitbucket 上的自己的项目,利用了新的 SQLAlchemy 方言兼容性套件。该方言仍然处于非常初步的阶段,可能还没有准备好供一般使用,但现在具有极其基本的功能。bitbucket.org/zzzeek/sqlalchemy-access
  • [feature] [firebird]
    “startswith()”运算符渲染为“STARTING WITH”,“~startswith()”渲染为“NOT STARTING WITH”,使用 FB 更有效的运算符。
    参考:#2470
  • [feature] [firebird]
    添加了一个用于 fdb 驱动程序的实验性方言,但由于无法构建 fdb 软件包,因此未经测试。
    参考:#2504
  • [bug] [firebird]
    当尝试发出没有长度的 VARCHAR 时,会引发 CompileError,与 MySQL 的方式相同。
    参考:#2505
  • [bug] [firebird]
    Firebird 现在使用严格的“ansi 绑定规则”,以便绑定参数不会在语句的列子句中呈现-它们会直接呈现。
  • [bug] [firebird]
    在使用 DateTime 类型与 Firebird 时,支持将 datetime 作为 date 传递;其他方言也支持此功能。
  • [moved] [maxdb]
    MaxDB 方言已经多年没有功能了,现在移至一个待定的 bitbucket 项目中,bitbucket.org/zzzeek/sqlalchemy-maxdb

0.8.7

发布日期:2014 年 7 月 22 日

orm

  • [orm] [bug]
    修复了子查询急加载中的错误,其中在多态子类边界上的长链急加载与多态加载一起会无法找到子类链接,导致在AliasedClass上出现缺少属性名称的错误。
    参考:#3055
  • [orm] [bug]
    修复了 ORM bug,其中 class_mapper() 函数会掩盖应该在 mapper 配置期间由于用户错误而引发的 AttributeErrors 或 KeyErrors。对于属性/键错误的捕获已更具体,以不包括配置步骤。
    参考:#3047

sql

  • [sql] [bug]
    修复了在 Enum 和其他 SchemaType 子类中直接将类型与 MetaData 关联时会导致在发出事件(如创建事件)时挂起的 bug。
    参考:#3124
  • [sql] [bug]
    修复了自定义操作符加法 TypeEngine.with_variant() 系统中的一个错误,当与变体一起使用 TypeDecorator 时,使用比较运算符会导致 MRO 错误。
    参考:#3102
  • [sql] [bug]
    修复了在 INSERT…FROM SELECT 结构中的一个 bug,其中从 UNION 中选择会将 union 包装在一个匿名的子查询中。
    参考:#3044
  • [sql] [bug]
    修复了当应用空的 and_()or_() 或其他空白表达式时,Table.update()Table.delete() 会产生空的 WHERE 子句的 bug。现在这与 select() 的行为一致了。
    参考:#3045

postgresql

  • [postgresql] [bug]
    hashable=False 标志添加到 PG HSTORE 类型中,这是为了允许 ORM 在请求混合列/实体列表中的 ORM 映射的 HSTORE 列时跳过尝试“散列”ORM 映射的 HSTORE 列所需的。修补程序由 Gunnlaugur Þór Briem 提供。
    参考:#3053
  • [postgresql] [bug]
    添加了一个新的“断开连接”消息“连接已意外关闭”。这似乎与较新版本的 SSL 有关。感谢 Antti Haapala 提供的拉取请求。

mysql

  • [mysql] [bug]
    MySQL 错误  2014“命令不同步”似乎是在现代 MySQL-Python 版本中作为 ProgrammingError 而不是  OperationalError 引发的;所有经过测试的 MySQL 错误代码“is disconnect”现在都在  OperationalError 和 ProgrammingError 中进行检查。
    参考:#3101
  • [mysql] [bug]
    修复了一个 bug,即在索引的mysql_length参数中添加的列名需要具有相同的引号才能被识别。修复使引号变为可选,但也为那些使用解决方法的人提供了旧的行为以实现向后兼容。
    参考:#3085
  • [mysql] [bug]
    添加了对包含 KEY_BLOCK_SIZE 的索引使用等号的表进行反射的支持。感谢 Sean McGivern 提供的拉取请求。

mssql

  • [mssql] [bug]
    将语句编码添加到“SET IDENTITY_INSERT”语句中,当在 IDENTITY 列中插入显式 INSERT 时进行操作,以支持在不支持 unicode 语句的驱动程序(如 pyodbc + unix + py2k)上使用非 ascii 表标识符。
  • [mssql] [bug]
    在 SQL Server pyodbc 方言中,修复了description_encoding方言参数的实现,当未明确设置时,会导致在包含其他编码名称的结果集中无法正确解析 cursor.description。今后不应该需要此参数。
    参考:#3091

misc

  • [bug] [declarative]
    当访问__mapper_args__字典时,它是从声明性 mixin 或抽象类中复制的,以便声明性本身对该字典所做的修改不会与其他映射发生冲突。该字典在version_id_colpolymorphic_on参数方面进行修改,用本地类/表正式映射到的列替换其中的列。
    参考:#3062
  • [bug] [ext]
    修复了可变扩展中的 bug,即MutableDict未为setdefault()字典操作报告更改事件。
    参考:#3051, #3093
  • [bug] [ext]
    修复了MutableDict.setdefault()未返回现有值或新值的 bug(此 bug 未在任何 0.8 版本中发布)。感谢 Thomas Hervé提供的拉取请求。
    参考:#3051, #3093

orm

  • [orm] [bug]
    修复了子查询贪婪加载中的错误,在多态子类边界上长链贪婪加载与多态加载结合使用时,会无法找到链中的子类链接,会在一个AliasedClass上出错,缺少属性名称。
    参考:#3055
  • [orm] [bug]
    修复了 ORM 中的错误,class_mapper()函数会掩盖应该在映射器配置期间由于用户错误而引发的 AttributeErrors 或 KeyErrors。对于属性/键错误的捕获已经更具体,不包括配置步骤。
    参考:#3047

sql

  • [sql] [bug]
    修复了Enum和其他SchemaType子类中的错误,在直接将类型与MetaData关联时,当在MetaData上触发事件(如创建事件)时会导致 hang。
    参考:#3124
  • [sql] [bug]
    修复了自定义操作符加上TypeEngine.with_variant()系统中的错误,其中使用TypeDecorator与 variant 一起时,在使用比较运算符时会出现 MRO 错误。
    参考:#3102
  • [sql] [bug]
    修复了在 INSERT…FROM SELECT 结构中的错误,其中从 UNION 中选择会将联合包装在一个匿名(例如未标记)子查询中。
    参考:#3044
  • [sql] [bug]
    修复了当应用空的and_()or_()或其他空白表达式时,Table.update()Table.delete()会生成空的 WHERE 子句的错误。现在,这与select()的行为一致。
    参考:#3045

postgresql

  • [postgresql] [bug]
    向 PG HSTORE类型添加了hashable=False标志,这是为了允许 ORM 在请求混合列/实体列表中的 ORM 映射的 HSTORE 列时跳过尝试“哈希”它。补丁由 Gunnlaugur Þór Briem 提供。
    参考:#3053
  • [postgresql] [bug]
    添加了新的“断开连接”消息“连接意外关闭”。这似乎与较新版本的 SSL 有关。感谢 Antti Haapala 的拉取请求。

mysql

  • [mysql] [bug]
    MySQL 错误 2014“commands  out of sync”似乎在现代 MySQL-Python 版本中被提升为 ProgrammingError,而不是  OperationalError;现在所有被测试为“is disconnect”的 MySQL 错误代码都在 OperationalError 和  ProgrammingError 中进行检查。
    参考:#3101
  • [mysql] [bug]
    修复了在索引的mysql_length参数上添加列名时,需要对带引号的名称使用相同的引号才能被识别的错误。修复使引号变为可选,但也为那些使用此解决方法的人提供了旧的行为以实现向后兼容。
    参考:#3085
  • [mysql] [bug]
    添加了对包含 KEY_BLOCK_SIZE 的索引使用等号进行反射表的支持。感谢 Sean McGivern 的拉取请求。

mssql

  • [mssql] [bug]
    在“SET IDENTITY_INSERT”语句中添加了语句编码,当在 IDENTITY 列中插入显式 INSERT 时,以支持在不支持 unicode 语句的驱动程序(如 pyodbc + unix + py2k)上操作非 ascii 表标识符。
  • [mssql] [bug]
    在 SQL Server pyodbc 方言中,修复了description_encoding方言参数的实现,当未显式设置时,会导致在包含以其他编码命名的名称的结果集中,无法正确解析 cursor.description。这个参数在未来不应该需要。
    参考:#3091

杂项

  • [bug] [declarative]
    当访问__mapper_args__字典时,该字典是从声明性 mixin 或抽象类中复制的,因此声明性本身对该字典所做的修改不会与其他映射冲突。该字典在version_id_colpolymorphic_on参数方面进行修改,用本地类/表正式映射到的列替换其中的列。
    参考:#3062
  • [bug] [ext]
    修复了可变扩展中的错误,即MutableDict未��告setdefault()字典操作的更改事件。
    参考:#3051#3093
  • [bug] [ext]
    修复了MutableDict.setdefault()方法未返回现有值或新值的错误(此错误未在任何 0.8 版本中发布)。感谢 Thomas Hervé提供的拉取请求。
    参考:#3051#3093

0.8.6

发布日期:2014 年 3 月 28 日

一般

  • [general] [bug]
    调整了setup.py文件,以支持可能将来从 setuptools 中删除setuptools.Feature扩展。如果不存在此关键字,设置仍将成功使用 setuptools 而不是退回到 distutils。现在还可以通过设置 DISABLE_SQLALCHEMY_CEXT 环境变量来禁用 C 扩展构建。无论 setuptools 是否可用,此变量都有效。
    参考:#2986

orm

  • [orm] [bug]
    修复了 ORM 中的错误,即更改对象的主键,然后将其标记为 DELETE 会导致无法针对 DELETE 操作正确定位行的错误。
    参考:#3006
  • [orm] [bug]
    由于#2818导致 0.8.3 中的回归,Query.exists()在只有一个Query.select_from()条目但没有其他实体的查询上无法工作。
    参考:#2995
  • [orm] [bug]
    改进了一个错误消息,该错误消息会在对非可选择对象(例如literal_column())进行查询(query())后,尝试使用Query.join()时出现,使得“左”侧被确定为None然后失败。现在明确检测到这种情况。
  • [orm] [bug]
    sqlalchemy.orm.interfaces.__all__中删除了过时的名称,并更新为当前名称,以便再次从该模块进行import *操作。
    参考:#2975

sql

  • [sql] [bug]
    修复了 tuple_() 构造中的错误,其中基本上第一个 SQL 表达式的“类型”将被应用为比较元组值的“比较类型”;在某些情况下,这会导致不合适的“类型强制转换”发生,例如当一个元组具有字符串和二进制值的混合时,错误地将目标值强制转换为二进制,即使左侧的值并非如此。tuple_() 现在预期其值列表中有异构类型。
    参考:#2977

postgresql

  • [postgresql] [feature]
    启用了 psycopg2 DBAPI 的“合理的多行计数”检查,因为从 psycopg2 2.0.9 开始似乎支持了这个功能。
  • [postgresql] [bug]
    由于版本  0.8.5 / 0.9.3 的兼容性增强引起的固定回归,再次导致仅针对 8.1、8.2 系列的 PostgreSQL  版本的索引反射再次中断,围绕着一直存在问题的 int2vector 类型。虽然 int2vector 支持从 8.1 开始的数组操作,但显然,从  8.3 开始只支持 CAST 到 varchar。
    参考:#3000

杂项

  • [bug] [ext]
    修复了可变扩展和 flag_modified() 中的错误,如果属性已重新分配给自身,则更改事件将不会传播。
    参考:#2997

一般

  • [general] [bug]
    调整了 setup.py 文件,以支持可能将来从 setuptools 中移除 setuptools.Feature 扩展。如果没有这个关键字,设置仍然会成功使用 setuptools 而不是回退到 distutils。现在也可以通过设置 DISABLE_SQLALCHEMY_CEXT 环境变量来禁用 C 扩展构建。此变量无论 setuptools 是否可用都有效。
    参考:#2986

orm

  • [orm] [bug]
    修复了 ORM 中的错误,在更改对象的主键后,将其标记为 DELETE 将无法针对正确的行进行 DELETE。
    参考:#3006
  • [orm] [bug]
    从 0.8.3 的回归中修复了问题,这是由于 #2818 导致的,Query.exists() 在只有一个 Query.select_from() 条目但没有其他实体的查询上无法工作。
    参考:#2995
  • [orm] [bug]
    改进了一个错误消息,该消息会在对非可选择对象(例如literal_column())进行查询(query())后,尝试使用Query.join()时出现,导致“左”侧被确定为None然后失败。现在明确检测到这种情况。
  • [orm] [bug]
    sqlalchemy.orm.interfaces.__all__中删除了过时的名称,并使用当前名称进行刷新,以便再次从该模块进行import *操作。
    参考:#2975

sql

  • [sql] [bug]
    修复了tuple_()构造中的  bug,其中基本上第一个 SQL  表达式的“类型”将被应用为与比较的元组值的“比较类型”;在某些情况下,这会导致不适当的“类型强制转换”发生,例如当一个元组具有混合的  String 和 Binary 值时,错误��将目标值强制转换为 Binary,即使左侧并不是这样。tuple_()现在期望其值列表中存在异构类型。
    参考:#2977

postgresql

  • [postgresql] [feature]
    为 psycopg2 DBAPI 启用了“合理的多行计数”检查,因为似乎从 psycopg2 2.0.9 开始支持这一功能。
  • [postgresql] [bug]
    修复了由版本  0.8.5 / 0.9.3 的兼容性增强引起的回归,其中针对仅适用于 8.1、8.2 系列的 PostgreSQL  版本的索引反射再次中断,围绕着一直存在问题的 int2vector 类型。虽然 int2vector 从 8.1 开始支持数组操作,但显然只有从  8.3 开始才支持将其转换为 varchar。
    参考:#3000

杂项

  • [bug] [ext]
    修复了可变扩展中的错误以及flag_modified()中的 bug,如果属性已重新分配给自身,则更改事件将不会传播。
    参考:#2997

0.8.5

发布日期:2014 年 2 月 19 日

orm

  • [orm] [bug]
    修复了Query.get()中的 bug,当在具有现有条件的查询上调用时,给定的标识已经存在于标识映射中时,它将无法一致地引发InvalidRequestError
    参考:#2951
  • [orm] [bug]
    修复了当向class_mapper()或类似函数传递迭代器对象时,错误消息无法正确呈现的错误。Kyle Stark 提供的 Pullreq。
  • [orm] [bug]
    subqueryload()策略的调整,确保查询在加载过程开始后运行;这样子查询加载就优先于其他可能在错误的时间由于其他急切/不加载情况而命中同一属性的加载器。
    引用:#2887
  • [orm] [bug]
    修复了当从基表继承到一个选择/别名的联接表继承时,PK 列也不具有相同名称时的错误,此时持久化系统会在插入时失败,无法将主键值从基表复制到继承表。
    引用:#2885
  • [orm] [bug]
    当传递的列/属性(名称)不能解析为列或映射属性(例如错误的元组)时,composite()将引发一个信息性错误消息;以前会引发一个未绑定的本地错误。
    引用:#2889

引擎

  • [engine] [bug] [pool]
    修复了由#2880引起的关键性回归,其中新的并发能力从池中返回连接意味着“first_connect”事件现在也不再同步,因此在即使是最小并发情况下也会导致方言配置错误。
    引用:#2880, #2964

SQL

  • [sql] [bug]
    修复了使用空列表或元组调用Insert.values()会引发 IndexError 的错误。现在它会产生一个空的插入构造,就像空字典的情况一样。
    引用:#2944
  • [sql] [bug]
    修复了当ColumnOperators.in_()被错误地传递包含__getitem__()方法的列表达式时进入无限循环的错误,例如使用ARRAY类型的列。
    引用:#2957
  • [sql] [bug]
    修复了一个问题,即具有 Sequence 的主键列,但该列不是“自动增量”列,要么因为有外键约束,要么设置了 autoincrement=False,在没有主键值的 INSERT 中尝试触发 Sequence,对于不支持序列的后端(如 SQLite、MySQL)会发生这种情况。
    参考:#2896
  • [sql] [bug]
    修复了 Insert.from_select() 方法的 bug,其中给定名称的顺序在生成 INSERT 语句时不会被考虑,因此与给定 SELECT 语句中的列名不匹配。还注意到 Insert.from_select() 暗示不能使用 Python 端的插入默认值,因为语句没有 VALUES 子句。
    参考:#2895
  • [sql] [enhancement]
    当编译语句中存在一个未设置值的 BindParameter 时,引发的异常现在在错误消息中包含绑定参数的键名。

postgresql

  • [postgresql] [bug]
    对 psycopg2 断开连接检测添加了额外的消息,“无法向服务器发送数据”,这与现有的“无法从服务器接收数据”相辅相成,并已被用户观察到。
    参考:#2936
  • [postgresql] [bug]

改进了对非常古老(8.1 之前)版本的 PostgreSQL 反射行为的支持,以及潜在的其他 PG 引擎,如 Redshift(假设  Redshift 报告版本为 < 8.1)。用于“索引”和“主键”的查询依赖于检查所谓的“int2vector”数据类型,该数据类型在  8.1 之前拒绝强制转换为数组,导致查询中使用的“ANY()”运算符失败。通过广泛的搜索,找到了非常巧妙但被 PG  核心开发人员推荐使用的查询,用于在使用 PG 版本 < 8.1 时,现在索引和主键约束反射可以在这些版本上工作。

  • [postgresql] [bug]
    修复了一个非常古老的问题,即  PostgreSQL 的“获取主键”反射查询已更新以考虑已重命名的主键约束;新的查询在 PostgreSQL 的非常古老版本(如版本  7)上失败,因此在检测到 server_version_info < (8, 0) 的情况下,在这些情况下恢复了旧查询。
    参考:#2291

mysql

  • [mysql] [feature]
    添加了新的 MySQL 特定DATETIME,其中包括小数秒支持;还向TIMESTAMP添加了小数秒支持。DBAPI 支持有限,尽管 MySQL Connector/Python 已知支持小数秒。Patch 由 Geert JM Vanderkelen 提供。
    参考:#2941
  • [mysql] [bug]
    添加了对PARTITION BYPARTITIONS MySQL 表关键字的支持,指定为mysql_partition_by='value'mysql_partitions='value'以用于Table。拉取请求由 Marcus McCurdy 提供。
    参考:#2966
  • [mysql] [bug]
    修复了阻止基于  MySQLdb 的方言(例如 pymysql)在 Py3K 中工作的错误,其中对“connection charset”的检查会由于 Py3K  的更严格的值比较规则而失败。在任何情况下,该调用都没有考虑数据库版本,因为在那时服务器版本仍然为 None,因此该方法总体上已简化为依赖于  connection.character_set_name()。
    参考:#2933
  • [mysql] [bug]
    一些缺失的方法已添加到 cymysql 方言中,包括 _get_server_version_info()和 _detect_charset()。拉取请求由 Hajime Nakagami 提供。

sqlite

  • [sqlite] [bug]
    恢复了在将唯一约束反射回 0.8 时遗漏的更改,其中包含 SQLite 列名称中的保留关键字将导致失败。拉取请求由 Roman Podolyaka 提供。

mssql

  • [mssql] [bug] [firebird]
    Float类型一起使用的“asdecimal”标志现在在 Firebird 和 mssql+pyodbc 方言中也可以工作;以前的十进制转换未发生。
  • [mssql] [bug] [pymssql]
    将“Net-Lib error during Connection reset by peer”消息添加到检查“pymssql”方言中的“disconnect”消息列表中。由 John Anderson 提供。

杂项

  • [bug] [py3k]
    修复了 Py3K 错误,其中缺少导入会导致在呈现绑定参数时无法导入“util.binary_type”的“literal binary”模式失败。0.9 处理方式不同。拉取请求由 Andreas Zeidler 提供。
  • [bug] [firebird]
    firebird 方言将引用以下划线开头的标识符。由 Treeve Jelbert 提供。
    参考:#2897
  • [bug] [firebird]
    修复了 Firebird 索引反射中的错误,其中索引中的列未正确排序;它们现在按照 RDB$FIELD_POSITION 的顺序排序。
  • [bug] [declarative]
    当将字符串参数发送给relationship()时,如果无法解析为类或映射器,则错误消息已更正为与接收非字符串参数时相同的方式,该方式指示了配置错误的关系名称。
    参考:#2888

orm

  • [orm] [bug]
    修复了Query.get()在查询中存在条件时无法一致引发InvalidRequestError的 bug,��给定的标识已经存在于标识映射中时。
    参考:#2951
  • [orm] [bug]
    当将迭代器对象传递给class_mapper()或类似方法时,修复了错误消息无法在字符串格式化时呈现的问题。感谢 Kyle Stark 提交的 Pullreq。
  • [orm] [bug]
    subqueryload()策略进行了调整,确保查询在加载过程开始后运行;这样,subqueryload 优先于其他加载器运行,这些加载器可能由于其他错误的时机导致了错误的贪婪加载。
    参考:#2887
  • [orm] [bug]
    修复了从表继承到基表的连接表继承时的 bug,其中主键列也不具有相同名称;持久性系统在插入时无法将主键值从基表复制到继承表中。
    参考:#2885
  • [orm] [bug]
    当传递的列/属性(名称)无法解析为列或映射属性(例如错误的元组)时,composite()将引发一个信息性错误消息;之前会引发未绑定的本地错误。
    参考:#2889

引擎

  • [engine] [bug] [pool]
    修复了由#2880引起的关键回归,其中新的并发能力从池中返回连接意味着“first_connect”事件现在也不再同步,从而导致在即使是最小并发情况下也会出现方言配置错误。
    参考:#2880#2964

sql

  • [sql] [bug]
    修复了调用带有空列表或元组的Insert.values()会引发 IndexError 的 bug。现在它会产生一个空的插入构造,就像使用空字典一样。
    参考:#2944
  • [sql] [bug]
    修复了ColumnOperators.in_()会进入无限循环的 bug,如果错误地传递了一个包含__getitem__()方法的列表达式的比较器,比如使用ARRAY类型的列。
    参考:#2957
  • [sql] [bug]
    修复了一个问题,即主键列上有一个 Sequence,但该列不是“自动增量”列,可能是因为它有外键约束或设置了autoincrement=False,在不支持序列的后端上,当出现一个缺少主键值的 INSERT 时,会尝试触发 Sequence。这将发生在像 SQLite、MySQL 这样的非序列后端上。
    参考:#2896
  • [sql] [bug]
    修复了Insert.from_select()方法的 bug,其中给定名称的顺序在生成 INSERT 语句时不会被考虑,因此与给定 SELECT 语句中的列名不匹配。还指出Insert.from_select()暗示不能使用 Python 端的插入默认值,因为该语句没有 VALUES 子句。
    参考:#2895
  • [sql] [enhancement]
    当编译语句中存在一个未赋值的BindParameter时,引发的异常现在在错误消息中包含绑定参数的键名。

postgresql

  • [postgresql] [bug]
    添加了一个额外的消息到 psycopg2 的断开连接检测中,“无法发送数据到服务器”,这与现有的“无法从服务器接收数据”相辅相成,并已被用户观察到。
    参考:#2936
  • [postgresql] [bug]

改进了对非常古老(8.1 之前)版本的 PostgreSQL 以及其他可能的 PG 引擎(如 Redshift,假设  Redshift 将版本报告为<8.1)的 PostgreSQL  反射行为的支持。关于“索引”和“主键”的查询依赖于检查所谓的“int2vector”数据类型,该数据类型在 8.1  之前拒绝强制转换为数组,导致查询中使用的“ANY()”运算符失败。通过广泛的搜索,找到了非常 hacky 但由 PG  核心开发人员推荐使用的查询,用于在使用 PG 版本<8.1 时使用,因此现在在这些版本上可以正常工作索引和主键约束反射。

  • [postgresql] [错误]
    修改了这个非常古老的问题,其中  PostgreSQL 的“获取主键”反射查询已更新以考虑已重命名的主键约束;新的查询在非常古老的 PostgreSQL 版本(如版本  7)上失败,因此在检测到 server_version_info < (8, 0)的情况下,在这些情况下恢复旧查询。
    参考:#2291

mysql

  • [mysql] [功能]
    添加了新的 MySQL 特定的DATETIME,其中包括分数秒支持;还向TIMESTAMP添加了分数秒支持。DBAPI 支持有限,尽管 MySQL Connector/Python 已知支持分数秒。Patch 由 Geert JM Vanderkelen 提供。
    参考:#2941
  • [mysql] [错误]
    添加了对PARTITION BYPARTITIONS MySQL 表关键字的支持,指定为mysql_partition_by='value'mysql_partitions='value'Table。感谢 Marcus McCurdy 的 Pull 请求。
    参考:#2966
  • [mysql] [错误]
    修复了阻止基于  MySQLdb 的方言(例如 pymysql)在 Py3K 中工作的错误,其中“连接字符集”检查将由于 Py3K  更严格的值比较规则而失败。在任何情况下,该调用都没有考虑数据库���本,因为服务器版本在那时仍然为 None,因此该方法已简化为依赖于  connection.character_set_name()。
    参考:#2933
  • [mysql] [错误]
    在 cymysql 方言中添加了一些缺失的方法,包括 _get_server_version_info()和 _detect_charset()。感谢 Hajime Nakagami 的 Pullreq。

sqlite

  • [sqlite] [错误]
    恢复了在将唯一约束反射回 0.8 时遗漏的更改,其中在列名称中包含保留关键字的情况下,使用 SQLite 的UniqueConstraint将失败。感谢 Roman Podolyaka 的 Pull 请求。

mssql

  • [mssql] [bug] [firebird]
    Float类型一起使用的“asdecimal”标志现在也适用于 Firebird 以及 mssql+pyodbc 方言;以前未进行十进制转换。
  • [mssql] [bug] [pymssql]
    将“Net-Lib error during Connection reset by peer”消息添加到在 pymssql 方言中检查“disconnect”消息列表中。感谢 John Anderson。

杂项

  • [bug] [py3k]
    修复了 Py3K 中的错误,其中缺少导入将导致在呈现绑定参数时“literal binary”模式无法导入“util.binary_type”。0.9 处理方式不同。感谢 Andreas Zeidler 的拉取请求。
  • [bug] [firebird]
    火鸟方言将引用以下划线开头的标识符。感谢 Treeve Jelbert。
    参考:#2897
  • [bug] [firebird]
    修复了 Firebird 索引反射中列未正确排序的错误;现在它们按照 RDB$FIELD_POSITION 的顺序排序。
  • [bug] [declarative]
    当发送给relationship()的字符串参数无法解析为类或映射器时,错误消息已更正,与接收非字符串参数时的工作方式相同,指示配置错误的关系名称。
    参考:#2888

0.8.4

发布日期:2013 年 12 月 8 日

orm

  • [orm] [bug]
    修复了由#2818引入的回归,生成的 EXISTS 查询会为具有两个同名列的语句产生“正在替换列”警告,因为内部 SELECT 没有设置 use_labels。
    参考:#2818

引擎

  • [engine] [bug]
    connect()上引发错误的 DBAPI 不是 dbapi.Error 的子类(例如TypeErrorNotImplementedError等)将不会经过 dialect 的Dialect.is_disconnect()例程特定的错误处理,也不会将其包装在sqlalchemy.exc.DBAPIError中。现在将以与执行过程中发生的方式传播未更改的异常。
    参考:#2881
  • [engine] [bug] [pool]
    QueuePool已经改进,不会在现有连接尝试阻塞时阻止新的连接尝试。以前,新连接的生成在监视溢出的块内被串行化;现在,溢出计数器在连接过程本身之外的自己的关键部分中被改变。
    参考:#2880
  • [engine] [bug] [pool]
    对等待池化连接可用的逻辑进行了轻微调整,对于未指定超时的连接池,每隔半秒就会中断等待,以检查所谓的“中止”标志,这允许等待者在整个连接池被释放时中断;通常情况下,等待者应该由于  notify_all()而中断,但在极少数情况下可能会错过这个 notify_all()。这是在 0.8.0  中首次引入的逻辑的扩展,该问题只在压力测试中偶尔观察到。
    参考:#2522
  • [engine] [bug]
    修复了当在Connection.execute()中引发预-DBAPI StatementError时,SQL 语句会被错误地 ASCII 编码的错误,导致非 ASCII 语句的编码错误。现在字符串化保持在 Python unicode 中,从而避免编码错误。
    参考:#2871

sql

  • [sql] [功能]
    通过Inspector.get_unique_constraints()方法,增加了对“唯一约束”反射的支持。感谢 Roman Podolyaka 的补丁。
    参考:#1443

postgresql

  • [postgresql] [bug]
    修复了在使用 pypostgresql 适配器时,索引反射会错误解释 indkey 值的 bug,该适配器将这些值作为列表返回,而不是 psycopg2 返回的字符串类型。
    参考:#2855

mssql

  • [mssql] [bug]
    修复了在 0.8.0 版本中引入的错误,即在 MSSQL 中,如果索引位于替代模式中,则DROP INDEX语句会显示错误;模式名/表名会被颠倒。格式也已经修订,以匹配当前的 MSSQL 文档。感谢 Derek Harland。

oracle

  • [oracle] [bug]
    将“最大空闲时间”错误代码 ORA-02396 添加到了与 cx_oracle 一起的“断开连接”代码列表中。
    参考:#2864
  • [oracle] [bug]
    修复了一个 bug,其中 Oracle VARCHAR类型在没有长度的情况下(例如用于CAST或类似情况)会错误地呈现None CHAR或类似情况。
    参考:#2870

杂项

  • [bug] [ext]
    修复了一个 bug,该 bug 导致serializer扩展无法正确处理包含非 ASCII 字符的表或列名。
    参考:#2869

orm

  • [orm] [bug]
    修复了由#2818引入的回归,生成的 EXISTS 查询会为具有两个同名列的语句产生“正在替换列”警告,因为内部 SELECT 不会设置 use_labels。
    参考:#2818

engine

  • [engine] [bug]
    一个在connect()上引发错误的 DBAPI,如果不是dbapi.Error的子类(例如TypeErrorNotImplementedError等),将不会改变异常。以前,connect()例程特定的错误处理既不恰当地通过方言的Dialect.is_disconnect()例程运行异常,也会将其包装在sqlalchemy.exc.DBAPIError中。现在,它将以与执行过程中发生的方式相同的方式传播。
    参考:#2881
  • [engine] [bug] [pool]
    QueuePool已经改进,当现有连接尝试阻塞时,不会阻止新的连接尝试。以前,新连接的生成在监视溢出的块内串行化;现在,溢出计数器在连接过程本身之外的自己的关键部分中进行了修改。
    参考:#2880
  • [engine] [bug] [pool]
    对等待可用连接的逻辑进行了轻微调整,对于未指定超时的连接池,每隔半秒就会中断等待以检查所谓的“中止”标志,这允许等待者在整个连接池被丢弃的情况下中断;通常,等待者应该由于  notify_all()而中断,但在极少数情况下可能会错过这个 notify_all()。这是在 0.8.0  中首次引入的逻辑的扩展,该问题只在压力测试中偶尔观察到。
    参考:#2522
  • [engine] [bug]
    修复了一个 bug,在Connection.execute()中引发预先 DBAPI StatementError时,SQL 语句会被错误地 ASCII 编码,导致非 ASCII 语句的编码错误。现在字符串化保持在 Python unicode 中,从而避免编码错误。
    参考:#2871

SQL

  • [sql] [feature]
    通过Inspector.get_unique_constraints()方法,增加了对“唯一约束”反射的支持。感谢 Roman Podolyaka 的补丁。
    参考:#1443

PostgreSQL

  • [postgresql] [bug]
    修复了一个 bug,其中在使用 pypostgresql 适配器时,索引反射会错误地解释 indkey 值,该适配器将这些值作为列表返回,而不是 psycopg2 的字符串返回类型。
    参考:#2855

MSSQL

  • [mssql] [bug]
    修复了在 0.8.0 中引入的 bug,其中 MSSQL 中索引的DROP INDEX语句会在索引位于备用模式时错误呈现;模式名/表名会被颠倒。格式也已经修订,以匹配当前的 MSSQL 文档。感谢 Derek Harland。

Oracle

  • [oracle] [bug]
    将 ORA-02396“最大空闲时间”错误代码添加到与 cx_oracle 一起的“断开连接”代码列表中。
    参考:#2864
  • [oracle] [bug]
    修复了一个 bug,其中没有长度的 Oracle VARCHAR类型(例如用于CAST或类似操作)会错误地呈现为None CHAR或类似情况。
    参考:#2870

杂项

  • [bug] [ext]
    修复了一个 bug,该 bug 导致serializer扩展无法正确处理包含非 ASCII 字符的表格或列名。
    参考:#2869


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

相关文章
|
9天前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十四)(3)
SqlAlchemy 2.0 中文文档(六十四)
10 0
|
9天前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十四)(1)
SqlAlchemy 2.0 中文文档(六十四)
10 0
|
5天前
|
SQL 数据库连接 数据库
SqlAlchemy 2.0 中文文档(五十五)(2)
SqlAlchemy 2.0 中文文档(五十五)
11 1
|
5天前
|
SQL 安全 数据库连接
SqlAlchemy 2.0 中文文档(五十五)(5)
SqlAlchemy 2.0 中文文档(五十五)
14 1
|
5天前
|
SQL 缓存 编译器
SqlAlchemy 2.0 中文文档(五十五)(4)
SqlAlchemy 2.0 中文文档(五十五)
13 1
|
5天前
|
SQL 缓存 数据库连接
SqlAlchemy 2.0 中文文档(五十五)(1)
SqlAlchemy 2.0 中文文档(五十五)
12 1
|
5天前
|
API 数据库 Python
SqlAlchemy 2.0 中文文档(五十五)(6)
SqlAlchemy 2.0 中文文档(五十五)
12 1
|
5天前
|
SQL 数据库连接 API
SqlAlchemy 2.0 中文文档(五十五)(3)
SqlAlchemy 2.0 中文文档(五十五)
10 1
|
9天前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(六十五)(1)
SqlAlchemy 2.0 中文文档(六十五)
12 0
|
9天前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十五)(4)
SqlAlchemy 2.0 中文文档(六十五)
10 0