[orm] [bug] ¶
修正了1.2中的一个回归,其中通配符/load_only loader选项对使用_type()限制到特定子类的加载程序路径不能正确工作。到目前为止,该修复仅适用于简单子类的type(),而不是将在单独的问题中解决的具有u多态性的实体;后一种情况不太可能在以前起作用。
References: #4468
[orm] [bug] ¶
修复了相当简单但关键的问题,其中 SessionEvents.pending_to_persistent()
不仅当对象从挂起移动到持久化时,而且当它们也已经持久化并且刚刚被更新时,将为对象调用事件,从而在每次更新时为所有对象调用事件。
References: #4489
[sql] [bug] ¶
固定问题 JSON
类型具有只读 JSON.should_evaluate_none
属性,在使用 TypeEngine.evaluates_none()
方法与此类型一起使用。拉车请求由Sanjana S.提供。
References: #4485
[mssql] [bug] ¶
修复了SQL Server“标识插入”逻辑允许插入继续对标识列使用显式值的错误,该逻辑未检测到 Insert.values()
与包含 Column
作为键,SQL表达式作为值。
References: #4499
[orm] [feature] ¶
添加了新的事件挂钩 QueryEvents.before_compile_update()
和 QueryEvents.before_compile_delete()
哪种补充 QueryEvents.before_compile()
在这种情况下 Query.update()
和 Query.delete()
方法。
References: #4461
[orm] [bug] ¶
固定的问题是,当将单表继承与使用“具有多态性”加载的联合继承层次结构一起使用时,该单表实体的“单表条件”可能会与同一查询中使用的同一层次结构中的其他实体的“单表条件”混淆。“单表条件”的自适应程度更高特定于目标实体,以避免它意外地适应查询中的其他表。
References: #4454
[engine] [bug] ¶
修正了1.2版中引入的回归,其中 SQLAlchemyError
基本异常类在python 2k下引入了一种不适当的将普通字符串消息强制为unicode的方法,而python解释器不处理平台编码之外的字符(通常是ascii)。这个 SQLAlchemyError
类现在通过py2k下的bytestring传递 __str__()
与通常在py2k下异常对象的行为一样,使用反斜杠回退对unicode utf-8进行安全强制 __unicode__()
. 对于py3k,消息通常已经是unicode,但如果不是,则使用utf-8进行安全强制,并对 __str__()
方法。
References: #4429
[orm] [bug] ¶
修正了ORM注释可能对primaryjoin/secondaryjoin关系不正确的错误(如果使用模式) ForeignKey(SomeClass.id)
在声明性映射中。此模式会将不需要的注释泄漏到连接条件中,这些条件可以中断在 Query
不应该影响那个连接条件中的元素。现在,如果存在这些注释,则会从前面删除。
References: #4367
[orm] [bug] ¶
与最近的主题相似 #4349 ,修复了问题 Comparator.any()
和 Comparator.has()
如果“secondary”可选项需要显式地成为exists子查询中from子句的一部分,以适应此“secondary”是 Join
对象。
References: #4366
[orm] [bug] ¶
固定回归 #4349 如果将“secondary”表添加到动态加载器的FROM子句中,将影响 Query
使随后的连接到另一个实体。修复程序将主实体添加为源列表的第一个元素,因为 Query.join()
想从中跳出来。版本1.3也将有一个更全面的解决方案来解决这个问题。 (#4365 )
References: #4363
[orm] [bug] ¶
修复了使用 RelationshipProperty.of_type()
与仅按字符串引用属性名的链接选项一起使用,将无法定位属性。
References: #4400
[orm] [bug] ¶
固定错误 Session.bulk_update_mappings()
如果替换映射属性名会导致UPDATE语句的主键列包含在SET子句中,也会导致WHERE子句;对于SQL Server,这通常是无害的,但可能会由于标识列而引发错误。这是修复的同一个bug的延续 #3849 如果测试不足以捕获这一额外的缺陷。
References: #4357
[orm] [bug] ¶
修复了一个小的性能问题,在某些情况下,这可能会给结果提取增加不必要的开销,包括使用ORM列以及在查询中同时包含这些相同列的实体。当以不同的方式引用列时,这个问题与哈希/eq开销有关。
References: #4347
[sql] [feature] ¶
重构的 SQLCompiler
揭发 SQLCompiler.group_by_clause()
方法类似于 SQLCompiler.order_by_clause()
和 SQLCompiler.limit_clause()
方法,可由方言重写以自定义Group By呈现方式。拉请求礼遇塞缪尔周。
[sql] [bug] ¶
修正了错误 Enum.create_constraint
旗上 Enum
数据类型不会传播到类型的副本,这会影响用例,如声明性混合和抽象基。
References: #4341
[postgresql] [bug] ¶
增加了对 aggregate_order_by
函数按元素接收多个订单,以前只接受一个元素。
References: #4337
[misc] [bug] ¶
修复了实用程序语言助手内部的一部分向Python传递错误类型参数的问题。 __import__
内置为要导入的模块列表。该问题在核心库中没有产生任何症状,但可能导致外部应用程序出现问题,这些外部应用程序重新定义了 __import__
内置或其他仪器。拉式请求,由Joe Urciouoli提供。
[misc] [bug] [py3k] ¶
修正了由于python组织的变化而由python 3.7生成的额外警告 collections
和 collections.abc
包装。以前的 collections
在版本1.2.11中修复了警告。请求请求由Xtreak提供。
References: #4339
[bug] [ext] ¶
新增遗失 .index()
方法在关联代理扩展中列出基于关联的集合。
[orm] [bug] ¶
在weakref cleanup中为 InstanceState
对象以检查是否存在 dict
内置,以减少在解释器关闭期间发生这些清理时生成的错误消息。拉式请求,由罗穆拉德·布鲁内提供。
[orm] [bug] ¶
修复了使用 Lateral
与 Query.join()
以及 Query.select_entity_from()
不会将子句自适应应用于联接的右侧。”横向”介绍了连接右侧的可关联用例。在此之前,不考虑对该条款的修改。注意,仅在1.2中,由 Query.subquery()
由于 #4304 ;可选的需要由 select()
功能是“横向”连接的右侧。
References: #4334
[orm] [bug] ¶
修正了由 #3472 如果在更新后操作的上下文中处理“更新后”样式列,也会对更新后要删除的行进行处理,这意味着具有python-side值生成器的列将显示删除前为更新发出的当前已删除的值(这不是以前的行为)以及SQL发出的值生成器将使属性过期,这意味着由于该行已被删除,并且对象已从会话中分离,因此无法访问以前的值。作为会话的一部分添加的“PostFetch”逻辑 #3472 对于最终要删除的对象,现在完全跳过。
References: #4327
[orm] [declarative] [bug] ¶
修正了当通过 @declared_attr
可在已映射类的子类上调用。这将导致一个属性,当在 Mapper.all_orm_descriptors
.
References: #4326
[postgresql] [bug] ¶
修复了PostgreSQL方言中编译器关键字参数(如 literal_binds=True
未在表达式上传播到distinct。
References: #4325
[postgresql] [bug] ¶
修正了 array_agg()
函数,它是普通函数的一个稍微改变的版本 array_agg()
函数,也可以接受传入的“type”参数而不强制在其周围使用数组,基本上与1.1中为泛型函数修复的相同。 #4107 .
References: #4324
[postgresql] [bug] ¶
修复了PostgreSQL枚举反射中的错误,其中查询将报告区分大小写的带引号的名称,包括引号,在表反射过程中,这些引号与目标列不匹配,因为需要去掉引号。
References: #4323
[bug] [ext] ¶
固定问题,其中 BakedQuery
不包括 Session
作为缓存键的一部分,使用自定义查询类时会导致不兼容,特别是 ShardedQuery
它有一些不同的参数签名。
References: #4328
[sql] [bug] ¶
固定问题与 #3639 如果在非本机布尔后端的布尔上下文中呈现的表达式将与1/0进行比较,即使它已经是隐式布尔表达式,当 ColumnElement.self_group()
使用。虽然这不会影响用户友好的后端(mysql、sqlite),但Oracle(可能还有SQL Server)没有处理它。表达式是否在任何数据库上隐式为布尔值,现在作为附加检查提前确定,以避免在编译语句时生成整数比较。
References: #4320
[sql] [bug] ¶
添加了缺少的窗口函数参数 WithinGroup.over.range_
和 WithinGroup.over.rows
参数到 WithinGroup.over()
和 FunctionFilter.over()
方法,以对应添加到SQL函数的“over”方法中的范围/行功能 #3049 在版本1.1中。
References: #4322
[sql] [bug] ¶
修正了当相关的select与语句结合时,支持update和delete语句的多表没有将额外的from元素视为相关目标的错误。此更改现在包括这样一个语句的WHERE子句中的SELECT语句将尝试自动关联回父更新/删除中的这些附加表,或者无条件关联,如果 Select.correlate()
使用。请注意,如果select语句将没有FROM子句,那么auto correlation将引发一个错误,如果父更新/删除在其附加的一组表中指定相同的表,那么现在可能会发生这种情况;请指定 Select.correlate()
明确地解决。
References: #4313
[sql] [bug] ¶
修正了错误 Sequence
将在任何 Table
引用它,当序列也涉及到该表的服务器端默认值时,当使用 MetaData.drop_all()
. 处理要通过非服务器端列默认函数删除的序列的步骤现在在删除表本身之后调用。
References: #4300
[orm] [bug] ¶
修复了在 Query.join()
当链接共享同一个基类的已联接继承类时,可能无法正确适应前面的左侧。
References: #3505
[orm] [bug] ¶
在快速生成键缓存的情况下,可能会导致生成的键缓存过短。这反过来可能会导致缓存eatureload查询来代替非eaterload查询,反之亦然,对于多态的“selectin”加载,或者也可能用于延迟加载或selectin加载。
References: #4287
[orm] [bug] ¶
修复了新的多态selectin加载中的错误,其中内部使用的bakedquery将被给定的加载程序选项改变,这既会不适当地改变子类查询,也会将影响转嫁到后续查询。
References: #4286
[orm] [bug] ¶
固定回归 #4256 (它本身是对 #4228 )它破坏了未记录的行为,该行为转换为直接传递给 Query
将构造函数转换为单个元素序列。虽然此行为从未得到支持或记录,但它已在使用中,因此已作为行为合同添加到 Query
.
References: #4269
[orm] [bug] ¶
修复了1.2中的性能回归问题,以及关于“烘焙的”懒惰加载程序的错误结果,包括从原始加载程序生成缓存键 Query
对象的加载程序选项。如果加载程序选项是使用多个选项的公共基本元素以“分支”样式构建的,则相同的选项将重复地呈现到缓存键中,从而导致性能问题和生成错误的缓存键。当这种“分支”选项通过 Query.options()
以防止重复应用相同的选项对象。
References: #4270
[sql] [bug] ¶
1.2中的固定回归 #4147 在哪里 Table
它的一些索引列被重新定义为新的索引列,就像在反射期间或使用 Table.extend_existing
,这样 Table.tometadata()
方法在尝试复制这些索引时失败,因为它们仍然引用被替换的列。复制逻辑现在可以适应这种情况。
References: #4279
[mysql] [bug] ¶
在mysql connector python方言中固定了百分号加倍,这不需要百分号的去加倍。此外,mysql-connector python驱动程序在传递cursor.description中列名的方式上是不一致的,因此添加了一个变通解码器来有条件地将这些随机的、有时是字节值解码为unicode,只有在需要时才使用。此外,还改进了对mysql connector python的测试支持,但是应该注意的是,这个驱动程序仍然存在unicode的问题,到目前为止还没有解决。
[mysql] [bug] ¶
修复了索引反射中的错误,在MySQL8.0上,索引列规范中包含asc或desc的索引将无法正确反映,因为MySQL8.0引入了在表定义字符串中返回此信息的支持。
References: #4293
[mysql] [bug] ¶
修复了mysqldb方言和pymysql等变体中的错误,其中在连接时附加的“unicode返回”检查明确使用了“utf8”字符集,在mysql 8.0中,该字符集会发出警告,建议使用utf8mb4。现在,它被一个相当于utf8mb4的文件所取代。文档还针对MySQL方言进行了更新,以便在所有示例中指定utf8mb4。为了使用utf8mb3字符集和数据库(在某些边缘情况下,utf8mb4似乎存在排序问题),并支持在MySQL8.0中进行的配置默认更改,例如“时间戳”的显式“默认值”以及为无效的myisam索引引发的新错误,对测试套件进行了其他更改。
References: #4283
[mysql] [bug] ¶
这个 Update
建筑现在容纳 Join
对象,由MySQL支持,用于更新..从。由于构造已出于类似目的接受了别名对象,因此已暗示针对非表进行更新的功能,因此已添加了该功能。
References: #3645
[sqlite] [bug] ¶
修复了测试套件中的问题,其中sqlite 3.24添加了一个与typereflectiontest中的用法冲突的新保留字。拉式请求由Nils Philippsen提供。
[oracle] [feature] ¶
添加了一个当前仅由cx_Oracle方言使用的新事件, DialectEvents.setiputsizes()
. 事件传递的字典 BindParameter
对象到DBAPI特定类型的对象,这些对象在转换为参数名后将传递到cx_Oracle cursor.setinputsizes()
方法。这既允许查看setinputsizes进程,也允许更改传递给此方法的数据类型的行为。
References: #4290
[oracle] [bug] [mysql] ¶
修正了Oracle和MySQL方言的select with ctes中的insert,其中cte被放置在整个语句的上方,这与其他数据库的典型情况相同,但是Oracle和Mariadb 10.2希望cte位于“insert”段的下方。请注意,当将CTE应用于UPDATE或DELETE语句内的子查询时,Oracle和MySQL方言还不起作用,因为CTE仍应用于顶部而不是子查询内。
References: #4275
[feature] [ext] ¶
添加了新属性 Query.lazy_loaded_from
其中填充了 InstanceState
用这个吗 Query
为了偷懒加载关系。其基本原理是,它可以作为水平切分功能使用的提示,这样状态的标识令牌就可以用作ID_Chooser()中用于查询的默认标识令牌。
References: #4243
[bug] [py3k] ¶
已将inspect.formatargspec()的用法替换为从python标准库复制的自动版本,因为inspect.formatargspec()已被弃用,并且从python 3.7.0开始发出警告。
References: #4291
[orm] [bug] ¶
1.2.7中的固定回归 #4228 它本身正在修复一个1.2级的回归,其中 query_cls
可调用传递给 Session
被假定为 Query
具有类方法可用性,而不是任意可调用性。特别是,dogpile缓存示例说明了 query_cls
作为函数而不是 Query
子类。
References: #4256
[orm] [bug] ¶
修复了1.0版中发生的一个长期回归,它阻止了使用自定义 MapperOption
这改变了 Query
对象,因为惰性加载程序本身会覆盖这些参数。这适用于wiki上的“时间范围”示例。但是请注意, Query.populate_existing()
方法现在是必需的,以便重写与已加载到标识映射中的对象关联的映射器选项。
作为此更改的一部分,自定义 MapperOption
现在将导致与目标对象相关的惰性加载程序默认使用非烘焙查询,除非 MapperOption._generate_cache_key()
方法已实现。特别是,这修复了在使用dogpile.cache“advanced”示例时发生的一个回归,该示例不返回缓存的结果,而是由于与烘焙查询加载程序不兼容而发出SQL;随着更改,将 RelationshipCache
对于dogpile示例中的许多版本,包含的选项将完全禁用“baked”查询。请注意,Dogpile示例也进行了现代化,以避免将这两个问题作为问题的一部分。 #4258 .
References: #4128
[orm] [bug] ¶
修正了新的错误 Result.with_post_criteria()
方法不能正确地与子查询抢先加载程序交互,因为“post-criteria”不会应用于嵌入的子查询抢先加载程序。这与 #4128 在这一点上,后标准特性现在被懒惰的加载程序使用。
[orm] [bug] ¶
更新了dogpoill.caching示例,以包含适应“baked”查询系统的新结构,默认情况下,该系统在惰性加载程序和一些热切的关系加载程序中使用。dogpile.caching“relationshipu caching”和“advanced”示例也因 #4256 . 这里的问题也由中的修复程序解决。 #4128 .
References: #4258
[engine] [bug] ¶
修复了连接池问题,即如果在连接池的“返回时重置”序列和针对封闭打开的显式事务期间出现断开连接错误 Connection
对象(例如从调用 Session.close()
没有回滚、提交或调用 Connection.close()
不首先关闭用 Connection.begin()
)将导致双重签入,从而导致同一连接的并发签出。双签入条件现在被断言完全阻止,并且特定的双签入场景已经被修复。
References: #4252
[engine] [bug] ¶
修正了一个引用泄漏问题,在该问题中,由于存储了python 3字典键()使用的键视图,语句执行中使用的参数字典的值将仍然被“编译缓存”引用。拉请求由奥利维尔·格里塞尔提供。
[sql] [bug] ¶
修复了将文本值解释为SQL表达式值时使用的“含糊不清的文本”错误消息会遇到元组值,并且无法正确格式化消息的问题。拉车请求由Miguel Ventura提供。
[oracle] [bug] ¶
Oracle binary_float和binary_double数据类型现在参与到cx_oracle.setinputsizes()中,并沿本机_float传递,以支持NaN值。此外, BINARY_FLOAT
, BINARY_DOUBLE
和 DOUBLE_PRECISION
现在子类 Float
,因为这些是浮点数据类型,而不是十进制数据类型。这些数据类型已默认为 Float.asdecimal
标记为“假”与“什么”一致 Float
已经开始了。
References: #4264
[oracle] [bug] ¶
为 BINARY_FLOAT
, BINARY_DOUBLE
数据类型。
[oracle] [bug] ¶
改变了甲骨文的方言,当 Integer
类型正在使用中,cx_oracle.numeric类型是为setinputsizes()设置的。在sqlAlchemy 1.1和更早版本中,所有数字类型都无条件地传递了cx_oracle.numeric,在1.2中,为了获得更好的数字精度,删除了它。但是,对于整数,某些数据库/客户端设置将无法将布尔值true/false强制为整数,这会在使用sqlacalchemy 1.2时引入回归行为。总的来说,setinputsizes逻辑似乎需要更多的灵活性,所以这是一个开始。
References: #4259
[bug] [ext] ¶
水平切分扩展现在使用添加到ORM标识密钥的标识令牌作为 #4137 ,当发生对象刷新或基于列的延迟加载或未过期操作时。因为我们知道对象的“shard”来源,所以在刷新时使用该值,从而避免在任何情况下查询与该对象标识不匹配的其他shard。
References: #4247
[bug] [ext] ¶
修复了自动映射时可能发生的争用条件 AutomapBase.prepare()
在多线程上下文中对可能调用 configure_mappers()
由于使用了其他映射器。automap未完成的映射工作对于被 configure_mappers()
导致错误的步骤。
References: #4266
[bug] [tests] ¶
修复了测试套件中的一个bug,如果外部方言返回 None
对于 server_version_info
,排除逻辑将引发 AttributeError
.
References: #4249
[orm] [bug] ¶
修正了1.2分片查询功能中的回归,即在搜索标识映射以查找相关的多对一元素时,新的“标识标记”元素没有在延迟加载操作的范围内被正确考虑。新的行为将允许使用“ID选择器”,以便确定从标识映射中检索到的最佳标识密钥。为了实现这一点,1.2的“身份标记”方法的一些重构对 ShardedQuery
应该注意这一类的其他派生。
References: #4228
[orm] [bug] ¶
修复了单继承加载中的问题,即对单个继承子类使用别名实体,并结合 Query.select_from()
方法将导致SQL与混合到查询中的未负责任表一起呈现,从而导致笛卡尔积。尤其是在针对单个继承子类使用时,这会影响新的“selectin”加载程序。
References: #4241
[oracle] [bug] ¶
如果精度为空且小数位数为零,则Oracle数字数据类型将反映为整数,因为这是从Oracle表中反映出来的整数值的返回方式。拉车请求由肯特鲍尔提供。
[orm] [bug] ¶
修复了使用中的错误 Mutable.associate_with()
或 Mutable.as_mutable()
与使用其他命名属性设置了非主映射器的类一起使用会产生属性错误。由于非主映射器不用于持久性,可变扩展现在将非主映射器从其检测步骤中排除。
References: #4215
[sql] [bug] ¶
修复了从上一个修复到 #4204 在版本1.2.5中,其中在 CTE.alias()
已调用的方法不能正确引用自身。
References: #4204
[postgresql] [feature] ¶
在PostgreSQL表定义中添加了对“分区依据”的支持,使用“PostgreSQL分区依据”。拉请求由VSEvolod Solovyov提供。
[orm] [feature] ¶
添加了新功能 Query.only_return_tuples()
. 导致 Query
对象无条件返回键化的元组对象,即使查询是针对单个实体的。拉请求提供埃里克阿特金。
[orm] [bug] ¶
修复了新的“多态选择素”加载中的错误,即当从关系延迟加载程序中部分加载选定的多态对象时,会导致加载中出现“空入”条件,从而导致“内联”形式的“入”错误。
References: #4199
[orm] [bug] ¶
修正了1.2回归,其中包含 AliasedClass
对象,使用 QueryableAttribute.of_type()
方法,无法腌制。1.1的行为是从路径中省略别名类对象,因此恢复此行为。
References: #4209
[sql] [bug] ¶
固定错误 :class:.`CTE` construct along the same lines as that of #4204 在哪里 CTE
在“克隆”操作过程中,别名不会正确复制自身,因为在ORM中以及使用 ClauseElement.params()
方法。
References: #4210
[sql] [bug] ¶
修复了CTE渲染中的错误,其中 CTE
也变成了一个 Alias
如果在FROM子句中有多个对CTE的引用,则不会适当地将其“CTENAME as aliasname”子句呈现。
References: #4204
[sql] [bug] ¶
修正了新的“参数扩展”特性中的错误,即值的绑定参数处理器根本不起作用,测试未能覆盖这个非常基本的情况,包括枚举值不起作用。
References: #4198
[orm] [feature] ¶
添加了新参数 set_attribute.inititator
到 set_attribute()
函数,允许将从侦听器函数接收的事件令牌传播到后续的set事件。
[orm] [bug] ¶
修复了“更新后”功能中的问题,即在父对象已被删除但依赖对象未被删除时发出更新。这个问题已经存在很长一段时间了,但是自从1.2声明了与post_更新匹配的行之后,这就产生了一个错误。
This change is also backported to: 1.1.16
References: #4187
[orm] [bug] ¶
修复问题导致的修复回归 #4116 影响1.2.2版和1.1.15版,这会导致错误计算 AssociationProxy
作为 NoneType
在某些声明性混合/继承情况下,以及如果从未映射的类访问关联代理,则为类。“找出所有者”逻辑已被一个深入的例程替换,该例程通过分配给类或子类的完整映射器层次结构进行搜索,以确定正确的(我们希望)匹配;如果找不到匹配,则不会分配所有者。如果代理用于未映射的实例,则现在会引发异常。
This change is also backported to: 1.1.16
References: #4185
[orm] [bug] ¶
修正了错误 Bundle
对象没有在主服务器上正确报告 Mapper
由包表示的对象(如果有)。这个问题的一个直接的副作用是,新的selectinload加载程序策略不能与水平切分扩展一起工作。
References: #4175
[orm] [bug] ¶
修复了具体继承映射中的错误,在这种情况下,映射器将覆盖用户定义的属性(如混合属性),这些属性镜像来自兄弟类的映射属性的名称,因为在实例级别不可访问。此外,还确保在映射器配置阶段不会在类级别隐式调用用户绑定的描述符。
References: #4188
[orm] [bug] ¶
修正了错误 reconstructor()
如果事件助手应用于 __init__()
映射类的方法。
References: #4178
[engine] [bug] ¶
修复了事件与 Engine
在课堂上,当 Engine.execution_options()
使用方法。为了实现这一点,半私有阶级 OptionEngine
不再直接在类级别接受事件并将引发错误;类只从其父级传播类级别事件 Engine
. 实例级事件继续像以前一样工作。
References: #4181
[engine] [bug] ¶
这个 URL
对象现在允许多次指定查询键,这些键的值将被加入到列表中。这是为了支持在 CreateEnginePlugin
哪些文档可以多次传递“plugin”。此外,可以将插件名称传递给 create_engine()
使用新的 create_engine.plugins
参数。
References: #4170
[sqlite] [bug] ¶
修复了平台既没有安装pysqlite2也没有安装sqlite3时引发的导入错误,从而引发了与sqlite3相关的导入错误,而不是pysqlite2错误,后者不是实际的失败模式。拉请求礼貌罗宾。
[bug] [pool] ¶
修复了一个相当严重的连接池错误,其中用户定义的连接刷新后获得的连接 DisconnectionError
或者,由于1.2发布的“pre-pung”功能,如果通过weakref cleanup将连接返回到池中(例如,前向对象被垃圾收集),则无法正确重置;weakref仍将引用以前无效的dbapi连接,而该连接将错误地调用重置操作。这将导致日志中的堆栈跟踪和在不重置的情况下签入池的连接,这可能导致锁定问题。
This change is also backported to: 1.1.16
References: #4184
[bug] [tests] ¶
在1.2中添加的一个测试被认为是为了确认python 2.7的行为,结果证明它只确认了从python 2.7.8开始的行为。python bug 8743仍然影响了python 2.7.7和更早版本中的集比较,因此涉及AssociationSet的测试不再适用于这些较旧的python 2.7版本。
References: #3265
[mysql] [bug] ¶
在mysql方言中添加了更多mysql 8.0保留字,用于引用。拉式请求,由Riccardo Magliocchetti提供。
[orm] [bug] ¶
修复了在嵌套或子事务回滚过程中删除的对象(该对象的主键也发生了变化)无法从会话中正确删除的错误,从而导致在使用会话时出现后续问题。
This change is also backported to: 1.1.16
References: #4151
[orm] [bug] ¶
修正了加载/未绑定加载对象(例如加载程序选项)的pickle格式更改和 __setstate__()
正在为从旧格式接收的对象引发UnboundLocalError,即使已尝试这样做。现在添加了测试以确保此工作正常。
References: #4159
[orm] [bug] ¶
修正了中新的Lazyload缓存方案导致的回归 #3954 如果使用类型为的加载程序选项的查询将导致无关路径的延迟加载失败,并出现类型错误。
References: #4153
[orm] [bug] ¶
修复了新的“selectin”关系加载器中的错误,在加载多态对象集合时,加载器可以尝试加载不存在的关系,其中只有一些映射器包含该关系,通常是在 PropComparator.of_type()
正在被使用。
References: #4156
[sql] [bug] ¶
固定错误 Insert.values()
其中结合使用“多值”格式 Column
对象作为键而不是字符串将失败。拉车请求由Aubrey Stark Toller提供。
This change is also backported to: 1.1.16
References: #4162
[bug] [ext] ¶
由于以下原因,关联代理中的固定回归 #3769 (允许链接any()/has())其中contains()针对形式中链接的关联代理(o2M relationship,association proxy(m2o relationship,m2o relationship))将引发有关在链的最终链接上重新应用contains()的错误。
References: #4150
[bug] [tests] ¶
从干扰第三方方言套件的公共测试套件中删除了Oracle特定的需求规则。
[bug] [tests] ¶
添加了一个新的排除规则组“byu-complex”表达式,该表达式禁用使用“group by<expr>”的测试,这似乎不适用于至少两种第三方方言。
[orm] [feature] ¶
向ORM的标识映射使用的标识键元组添加了一个新的数据成员,称为“标识标记”。此令牌默认为无,但可以由数据库切分方案使用,以区分内存中具有来自不同数据库的相同主键的对象。水平切分扩展集成了将切分标识符应用于它的这个令牌,从而允许在水平切分的后端复制主键。
参见
References: #4137
[orm] [bug] [ext] ¶
修正了关联代理无意中链接到 AliasedClass
对象,如果首先使用 AliasedClass
作为父级,在后续使用时导致错误。
This change is also backported to: 1.1.15
References: #4116
[orm] [bug] ¶
固定错误 contains_eager()
查询选项,其中使用 PropComparator.of_type()
在多个联接级别中引用子类还需要为“alias”参数提供相同的子类型,以避免向查询中添加不需要的from子句;此外,使用 contains_eager()
跨使用的子类 aliased()
子类的对象 PropComparator.of_type()
参数也将正确呈现。
References: #4130
[orm] [bug] ¶
这个 Query.exists()
方法现在将在呈现查询时禁用的热切加载程序。以前,联接的预加载联接将不必要地呈现,子查询也将不必要地生成预加载查询。新的行为与 Query.subquery()
方法。
References: #4032
[orm] [declarative] [bug] ¶
修复了一个缺陷,其中描述符位于基于 AbstractConcreteBase
在刷新操作期间被引用,导致错误,因为属性未映射为映射器属性。对于其他属性(如由添加的“type”列),也可能出现类似的问题。 AbstractConcreteBase
但是,如果类未能在其映射器中包含“concrete=true”,则此处的检查也应防止该场景导致问题。
This change is also backported to: 1.1.15
References: #4124
[sql] [bug] ¶
固定错误在哪里 __repr__
属于 ColumnDefault
如果参数是元组,则会失败。拉车请求,由Nicolas Caniart提供。
This change is also backported to: 1.1.15
References: #4126
[sql] [bug] ¶
重新编写了中引入的新“自动转义”功能 startswith()、endswith()的新“自动转义”选项 在1.2.0B2中是完全自动的;转义符现在默认为正斜杠。 "/"
并应用于百分号、下划线以及转义字符本身,以实现完全自动转义。也可以使用“escape”参数更改字符。
References: #2694
[sql] [bug] ¶
修正了错误 Table.tometadata()
方法不能正确适应 Index
不包含简单列表达式的对象,例如 text()
构造、使用SQL表达式的索引或 func
等。该例程现在将表达式完全复制到新的 Index
对象,同时替换所有绑定的表 Column
目标表的对象。
References: #4147
[sql] [bug] ¶
更改了的“就诊名称” ColumnElement
从“column”到“column_element”,这样当将此元素用作用户定义的SQL元素的基础时,就不会假定它的行为类似于表绑定。 ColumnClause
当由各种SQL遍历实用程序处理时,与ORM通常使用的一样。
References: #4142
[sql] [bug] [ext] ¶
固定问题 ARRAY
数据类型的问题与 #3832 ,但不是回归,其中列附加事件位于 ARRAY
不会正确发射,从而干扰依赖于此的系统。被它打破的一个关键用例是使用mixin声明使用 MutableList.as_mutable()
.
References: #4141
[sql] [bug] ¶
修正了新的“扩展绑定参数”特性中的错误,即如果在一条语句中使用多个参数,正则表达式将无法正确匹配参数名。
References: #4140
[sql] [enhancement] ¶
为PostgreSQL、MySQL、MS SQL Server(以及在不支持的Sybase方言中)实现了类似于“update..from”工作方式的“delete..from”语法。引用多个表的DELETE语句将切换到“多表”模式,并按照数据库的理解呈现相应的“使用”或“来自”子句。拉式请求,由Pieter Mulder提供。
参见
References: #959
[misc] [feature] ¶
在文档中添加了一个新的错误部分,其中包含有关常见错误消息的背景信息。在sqlAlchemy中选择的异常将在其字符串输出中包含指向此页中相关部分的链接。
[enhancement] [ext] ¶
添加了新方法 Result.with_post_criteria()
为了烘焙查询系统,允许在从缓存中提取查询后进行非SQL修改转换。除此之外,此方法可用于 ShardedQuery
设置碎片标识符。 ShardedQuery
也被修改为 ShardedQuery.get()
方法与的方法正确交互 Result
.
References: #4135
[orm] [bug] ¶
修复了ORM关系警告继承层次结构中的兄弟类发生冲突的同步目标(例如,两个关系都将写入同一列)的错误,因为这两个关系在写入期间实际上不会发生冲突。
This change is also backported to: 1.1.15
References: #4078
[orm] [bug] ¶
修复了针对单个表继承实体使用的相关select在外部查询中无法正确呈现的错误,因为对单个继承鉴别器条件的调整不适当地将条件重新应用到外部查询。
This change is also backported to: 1.1.15
References: #4103
[orm] [bug] ¶
固定错误 Session.merge()
沿着类似于 #4030 ,如果在合并例程实际检索对象之前立即对目标对象进行垃圾收集,则对标识映射中的目标对象进行内部检查可能会导致错误。
This change is also backported to: 1.1.14
References: #4069
[orm] [bug] ¶
修复了一个 undefer_group()
如果该选项从使用联接的预加载进行加载的关系扩展,则无法识别该选项。此外,由于错误导致执行的工作量过大,在结果集列的初始计算中,python函数调用计数也提高了20%,补充了 #3915 .
This change is also backported to: 1.1.14
References: #4048
[orm] [bug] ¶
固定错误 Session.merge()
其中集合中主键属性设置为的对象 None
对于通常是自动增量的密钥,将被视为内部重复数据消除过程的一部分的数据库持久化密钥,导致只有一个对象实际插入到数据库中。
This change is also backported to: 1.1.14
References: #4056
[orm] [bug] ¶
安 InvalidRequestError
当a synonym()
用于不针对 MapperProperty
,例如关联代理。以前,如果试图定位不存在的属性,就会发生递归溢出。
This change is also backported to: 1.1.14
References: #4067
[orm] [bug] ¶
1.2.0b1中引入的固定回归 #3934 何处 Session
如果回滚失败,将无法“停用”事务(目标问题是当MySQL失去对保存点的跟踪时)。这将导致随后调用 Session.rollback()
再次引发错误,而不是完成并带来 Session
回到活动状态。
References: #4050
[orm] [bug] ¶
固定问题 make_transient_to_detached()
函数将使目标对象上的所有属性(包括“延迟”属性)过期,这会导致属性在下次刷新时无法被检索,从而导致意外加载该属性。
References: #4084
[orm] [bug] ¶
修复了涉及删除孤立级联的bug,其中在父对象成为会话的一部分之前,相关项变为孤立项的情况仍被跟踪为进入孤立状态,这将导致它从会话中被清除,而不是被刷新。
注解
此修复程序在1.2.0b3版本中意外合并,并 未添加到变更日志 那时。从1.2.13版起,此变更日志注释已追溯添加到版本中。
References: #4040
[orm] [bug] ¶
固定错误 “selectin”多态加载,使用单独的in查询加载子类 这就阻止了多级类层次结构中的“selectin”和“inline”设置按预期进行交互。在文档中添加了一个新的示例。
参见
References: #4026
[orm] [bug] ¶
删除了当映射器和加载程序策略使用的LRU缓存达到阈值时发出的警告;此警告的目的最初是防止生成过多的缓存键,但基本上成为对“创建多个引擎”反模式的检查。虽然这仍然是一个反模式,但是测试套件的存在会给每个测试创建一个引擎,并且在所有警告上都会增加一个不便;不应该因为这个警告而改变它们的体系结构(尽管每个测试套件的引擎总是更好)。
References: #4071
[orm] [bug] ¶
固定回归式 undefer_group()
选项与惰性加载的关系选项一起使用会导致属性错误,这是由于在1.2中添加的SQL缓存键生成中的一个bug(作为 #3954 .
References: #4049
[orm] [bug] ¶
在中修改了对ORM更新/删除计算器所做的更改 #3366 这样,如果更新或删除中存在未映射的列表达式,则如果计算器可以将其名称与目标类的映射列匹配,则会发出警告,而不是引发UnwatableLerror。这本质上是1.2之前的行为,并且允许迁移当前依赖此模式的应用程序。但是,如果给定的属性名无法与映射器的列匹配,则仍会引发unwaaluatableError,这是在中修复的。 #3366 .
References: #4073
[engine] [feature] ¶
补充 __next__()
和 next()
方法到 ResultProxy
,以便 next()
内置函数直接作用于对象。 ResultProxy
早就有了 __iter__()
方法,该方法已允许它对 iter()
建筑。实施 __iter__()
是不变的,因为性能测试表明使用 __next__()
方法与 StopIteration
在python 2.7和3.6中都慢了20%。
References: #4077
[engine] [bug] ¶
做了一些调整 Pool
和 Connection
这样,恢复逻辑不会在异常捕获下运行 pool.Empty
, AttributeError
,因为当恢复操作本身失败时,python 3会创建一个引用 Empty
/ AttributeError
作为原因,当这些异常捕获实际上是控制流的一部分时。
References: #4028
[sql] [bug] ¶
修复了最近添加的错误 ColumnOperators.any_()
和 ColumnOperators.all_()
方法作为方法调用时无法工作,而不是使用独立函数 any_()
和 all_()
. 还为这些相对非抽象的SQL运算符添加了文档示例。
This change is also backported to: 1.1.15
References: #4093
[sql] [bug] ¶
添加了新方法 DefaultExecutionContext.get_current_parameters()
它用于基于函数的默认值生成器中,以检索传递给语句的当前参数。新函数与 DefaultExecutionContext.current_parameters
属性,因为它还提供了对应于多值“insert”构造的参数的可选分组。以前,无法识别与函数调用相关的参数子集。
References: #4075
[sql] [bug] ¶
修复了新的SQL注释功能中的错误,使用该功能时不会复制表和列注释。 Table.tometadata()
.
References: #4087
[sql] [bug] ¶
在1.1版中, Boolean
类型在布尔强制中被破坏 bool()
将出现在不具有“本机布尔”特性的后端,但不会出现在本机布尔后端,这意味着字符串 "0"
现在的行为前后不一致。在一次民意测验后,人们一致认为非布尔值应该引起一个错误,特别是在字符串的模糊情况下。 "0"
所以 Boolean
数据类型现在将引发 ValueError
如果传入值不在范围内 None, True, False, 1, 0
.
References: #4102
[sql] [bug] ¶
完善的行为 Operators.op()
在所有情况下,如果 Operators.op.is_comparison
标志设置为true,结果表达式的返回类型将为 Boolean
,如果标志为false,则结果表达式的返回类型将与左侧表达式的返回类型相同,这是其他运算符的典型默认行为。还添加了一个新参数 Operators.op.return_type
以及一个辅助方法 Operators.bool_op()
.
References: #4063
[sql] [bug] ¶
内部改进 Enum
, Interval
和 Boolean
类型,它现在扩展了一个通用的mixin Emulated
它表示一种类型,该类型提供对db本机类型的python端模拟,在使用支持后端时切换到db本机类型。邮报 INTERVAL
直接使用时的类型现在将包含正确的SQL表达式类型强制规则,这些规则也将对 Interval
(例如,向间隔中添加日期会生成日期时间)。
References: #4088
[postgresql] [feature] ¶
添加了新标志 use_batch_mode
到psycopg2方言。此标志允许使用psycopg2 psycopg2.extras.execute_batch
当 Engine
呼吁 cursor.executemany()
. 当批量运行insert语句时,此扩展提供了超过数量级的关键性能提升。该标志默认为假,因为它目前被认为是实验性的。
References: #4109
[postgresql] [bug] ¶
对 ARRAY
与collate结合使用的类,如 #4006 无法容纳多维数组。
This change is also backported to: 1.1.15
References: #4006
[postgresql] [bug] ¶
固定错误 array_agg
传递已为类型的参数的函数 ARRAY
如PostgreSQL array
构造,将生成 ValueError
,因为函数试图嵌套数组。
This change is also backported to: 1.1.15
References: #4107
[postgresql] [bug] ¶
修复了PostgreSQL中的错误 Insert.on_conflict_do_update()
这将阻止INSERT语句用作CTE,例如VIA Insert.cte()
在另一个语句中。
This change is also backported to: 1.1.15
References: #4074
[postgresql] [bug] ¶
修复了PG8000驱动程序在使用时会失败的错误 MetaData.reflect()
由于模式名将作为字符串子类的“带引号的名称”对象发送,PG8000无法识别该对象。引用的“名称”类型将添加到连接时PG8000的“py”类型集合中。
References: #4041
[postgresql] [bug] ¶
支持pg8000驱动程序的uuid,它支持此数据类型的本机python uuid往返。但是,仍然不支持UUID数组。
References: #4016
[mysql] [bug] ¶
当检测到Mariadb 10.2.8或10.2系列中的更早版本时发出警告,因为在这些版本中存在检查约束的主要问题,这些问题已在10.2.9版本中解决。
请注意,此changelog消息不是用sqlacalchemy 1.2.0b3发布的,并且是逆向添加的。
This change is also backported to: 1.1.15
References: #4097
[mysql] [bug] ¶
修正了当前的时间戳在MariaDB 10.2系列中由于语法变化而不能正确反映的问题,其中函数现在表示为 current_timestamp()
.
This change is also backported to: 1.1.15
References: #4096
[mysql] [bug] ¶
MariaDB 10.2现在支持CHECK约束(警告:由于 #4097 ). 现在,当这些检查约束出现在 SHOW CREATE TABLE
输出。
This change is also backported to: 1.1.15
References: #4098
[mysql] [bug] ¶
更改了 .values
新mysql insert..的属性(在重复的key update构造上) .inserted
作为 Insert
已经有一个方法调用 Insert.values()
. 这个 .inserted
属性最终呈现mysql VALUES()
功能。
References: #4072
[mssql] [feature] ¶
增加了一个新的 TIMESTAMP
数据类型,它正确地充当SQL Server的二进制数据类型,而不是日期时间类型,因为SQL Server在这里违反了SQL标准。还增加 ROWVERSION
,因为不推荐使用SQL Server中的“timestamp”类型而使用rowversion。
References: #4086
[mssql] [feature] ¶
增加了对“自动提交”隔离级别的支持,通过 Connection.execution_options()
,转到pyodbc和pymssql方言。此隔离级别在基础连接对象上设置相应的DBAPI特定标志。
References: #4058
[mssql] [bug] ¶
为SQL Server的pyodbc方言添加了完整的“连接关闭”异常代码,包括“08S01”、“01002”、“08003”、“08007”、“08S02”、“08001”、“hyt00”、“hy010”。以前,只涉及“08S01”。
This change is also backported to: 1.1.15
References: #4095
[mssql] [bug] ¶
SQL Server支持SQLAlchemy用位类型调用的“本机布尔值”,因为此类型只接受0或1,DBAPIS将其值返回为真/假。因此,SQL Server方言现在启用了“本机布尔”支持,因为不会为 Boolean
数据类型。与其他本机布尔值的唯一区别在于没有“true”/“false”常量,因此“1”和“0”仍在此处呈现。
References: #4061
[mssql] [bug] ¶
修正了pymsql方言,使SQL文本中的百分号,如在模数表达式或文本文本文本值中使用的百分号 not 翻了一番,这似乎是pymsql所期望的。尽管pymsqldapi使用了“pyformat”参数样式,但它本身认为百分号很重要。
References: #4057
[mssql] [bug] ¶
修复了在反映自引用外键约束时,如果多个架构对同名表包含同名约束,则SQL Server方言可以从多个架构中提取列的错误。
References: #4060
[mssql] [bug] [orm] ¶
为方言添加了一个新的“rowcount支持”类,该类语言在SQL Server上看起来像“output inserted”,因为pyodbc后端无法在输出生效时为我们提供update或delete语句的rowcount。这主要影响刷新更新包含服务器计算值的行时的ORM,如果后端不返回预期的行计数,则会引发错误。pyodbc现在声明它支持行数,除非存在output.inserted,ORM在刷新期间会考虑它是否查找行数。
References: #4062
[mssql] [bug] [orm] ¶
启用了pymsql方言的“sane_rowcount”标志,表示DBAPI现在报告了受更新或删除语句影响的正确行数。这主要影响ORM版本控制功能,因为它现在可以验证目标版本上受影响的行数。
[mssql] [bug] ¶
向SQL Server索引反射添加了一个规则,以忽略未指定聚集索引的表中隐式存在的所谓“堆”索引。
References: #4059
[oracle] [bug] [performance] [py2k] ¶
修正导致的固定性能回归 #3937 其中,从5.3版开始的cx_Oracle删除了 .UNICODE
名称空间中的符号,该符号被解释为cx_oracle的“with_unicode”模式被无条件打开,它调用sqlAlchemy端的函数,该函数无条件地将所有字符串转换为unicode并造成性能影响。事实上,根据cx-oracle的作者,从5.1开始,“with-unicode”模式已经被完全删除,因此,如果在python 2下检测到cx-oracle 5.1或更高版本,则不再需要昂贵的unicode转换函数,并且禁用这些函数。在下删除的针对“with_unicode”模式的警告 #3937 也会恢复。
This change is also backported to: 1.1.13, 1.0.19
References: #4035
[oracle] [bug] ¶
对持久化和检索Oracle值“Infinity”的部分支持是使用cx_Oracle实现的,只使用python float值,例如 float("inf")
. cx_Oracle DBAPI驱动程序尚未实现十进制支持。
References: #4064
[oracle] [bug] ¶
cx-oracle方言经过了重新修改和现代化,以利用cx-oracle旧4.x系列中没有的新模式。这包括:cx_Oracle的最低版本是5.x系列,cx_Oracle 6.x现在已经过全面测试。最重要的更改涉及类型转换,主要是关于数字/浮点和LOB数据类型,从而更有效地使用cx_Oracle类型处理挂钩来简化绑定参数和结果数据的处理方式。
[oracle] [bug] ¶
所有版本的cx_Oracle都完全取消了对cx_Oracle的两阶段支持,而在1.2.0b1中,此更改仅对cx_Oracle的6.x系列生效。此功能在任何版本的cx_Oracle和cx_Oracle 6.x中都无法正常工作,因此SQLAlchemy所依赖的API被删除。
References: #3997
[oracle] [bug] ¶
使用时结果集中存在的列键 Insert.returning()
对于cx-oracle后端,现在使用与所有其他方言相同的正确列/标签名称。以前,这些都是 ret_nnn
.
[oracle] [bug] ¶
cx_Oracle方言的几个参数现在已被弃用,将不起作用: auto_setinputsizes
, exclude_setinputsizes
, allow_twophase
.
[oracle] [bug] ¶
修复了由于试图过滤掉Oracle隐式添加到主键列中的索引的逻辑,如果表也没有主键,则在Oracle下使用表达式“column desc”反映的索引将不会返回的错误。
References: #4042
[oracle] [bug] ¶
修正了由cx_oracle 6.0引起的更多回归;目前,用户的唯一行为变化是断开检测现在检测到cx_oracle.databaseError,除了cx_oracle.interfaceError,因为这种行为似乎已经改变。有关数字精度和不可断开连接的其他问题正在上游cx_Oracle问题跟踪器中等待解决。
References: #4045
[oracle] [bug] ¶
修正了Oracle8“非ansi”连接模式不添加 (+)
运算符到使用除 =
操作员。这个 (+)
需要位于右侧的所有列上。
References: #4076
[orm] [bug] ¶
修正了从1.1.11开始的回归,其中向包含具有子查询加载关系的实体的查询中添加额外的非实体列将失败,因为1.1.11中添加的检查是由于 #4011 .
This change is also backported to: 1.1.12
References: #4033
[orm] [bug] ¶
修正了1.1中添加的JSON空评估逻辑作为 #3514 如果逻辑不支持与 Column
那是地图。
This change is also backported to: 1.1.12
References: #4031
[orm] [bug] ¶
补充 KeyError
检查中的所有方法 WeakInstanceDict
哪里有支票 key in dict
然后是对该键的索引访问,以防止垃圾收集争用,因为在加载时,在代码假定该键存在后,可以从dict中删除该键,从而导致非常罕见的 KeyError
加薪。
This change is also backported to: 1.1.12
References: #4030
[orm] [feature] ¶
安 aliased()
现在可以将构造传递给 Query.select_entity_from()
方法。实体将从由 aliased()
构建。这允许特殊选项 aliased()
如 aliased.adapt_on_names
配合使用 Query.select_entity_from()
.
This change is also backported to: 1.1.7
References: #3933
[orm] [feature] ¶
补充 .autocommit
属性到 scoped_session
代理 .autocommit
下划线的属性 Session
当前分配给线程。拉请求提供本费金。
[orm] [feature] ¶
添加了新功能 with_expression()
它允许在结果时将临时SQL表达式添加到查询中的特定实体。这是作为结果元组中的单独元素传递的SQL表达式的替代方法。
References: #3058
[orm] [feature] ¶
添加了一种新的映射器级继承加载“多态选择素”。这种类型的加载会在基本对象类型加载之后为继承层次结构中的每个子类发出查询,并使用in指定所需的主键值。
References: #3948
[orm] [feature] ¶
添加了一种称为“selectin”加载的新的预加载。这种类型的加载与“子查询”的预加载非常相似,只是它使用了一个in表达式,该表达式给出了已加载父对象的主键值列表,而不是重新声明原始查询。这将生成一个“烘焙”的更有效的查询(例如,SQL字符串被缓存),并且还可以在 Query.yield_per()
.
References: #3944
[orm] [feature] ¶
这个 lazy="select"
加载器策略现在利用 BakedQuery
所有情况下的查询缓存系统。这就消除了生成 Query
对象并将其运行到 select()
然后从延迟加载相关集合和对象的过程中字符串SQL语句。“烘焙的”懒惰加载程序也得到了改进,这样在使用查询加载选项的大多数情况下,它现在都可以缓存。
References: #3954
[orm] [feature] [ext] ¶
这个 Query.update()
方法现在既可以容纳混合属性,也可以容纳复合属性作为要放入set子句中的键的源。对于混血儿,额外的装饰师 hybrid_property.update_expression()
为其提供了用户提供的元组返回函数。
References: #3229
[orm] [feature] ¶
添加了新的属性事件 AttributeEvents.bulk_replace()
. 当将集合分配给关系时,在将传入集合与现有集合进行比较之前,会触发此事件。此早期事件还允许转换传入的非ORM对象。活动与 @validates
装饰者。
参见
References: #3896
[orm] [feature] ¶
添加了新的事件处理程序 AttributeEvents.modified()
当函数:.attributes.flag_modified`被调用时触发,这在使用 :mod:`sqlalchemy.ext.mutable 扩展模块。
References: #3303
[orm] [bug] ¶
修复了子查询抢先加载的问题,该问题从中修复的一系列问题继续进行。 #2699 , #3106 , #3893 包括“子查询”在从联接的继承子类开始时包含正确的FROM子句,然后子查询从基类预先加载到关系,而查询还包含针对子类的条件。以前的通知单中的修复不适用于从第一级更深入地加载的附加子查询加载操作,因此该修复已被进一步推广。
This change is also backported to: 1.1.11
References: #4011
[orm] [bug] ¶
修复了级联(如“删除孤立对象”(也包括其他对象)将无法定位链接到关系的对象,而该关系本身是继承关系中子类的本地关系,从而导致操作无法进行的错误。
This change is also backported to: 1.1.10
References: #3986
[orm] [bug] ¶
修正了由于通过 #3915 . 内部集合 Column
对象可以在别名对象上不适当地重新生成,当它试图呈现SQL和收集结果并导致属性错误时,会混淆连接的热切加载程序。现在,在别名对象被缓存并在线程之间共享之前,将预先生成集合。
This change is also backported to: 1.1.7
References: #3947
[orm] [bug] ¶
由于 relationship.post_update
现在,功能将与版本控制功能集成,以同时增加行的版本ID,并断言现有版本号已匹配。
References: #3496
[orm] [bug] ¶
修复了涉及 relationship.post_update
与具有“onUpdate”值的列一起使用时的功能。当更新发出时,相应的对象属性现在过期或刷新,以便新生成的“onUpdate”值可以填充到对象上;以前的过时值将保持不变。另外,如果在python中为对象的插入设置了目标属性,那么在更新过程中会重新发送该值,这样“onupdate”就不会覆盖它(请注意,这对服务器生成的onupdate同样有效)。最后, SessionEvents.refresh_flush()
当在刷新中刷新时,现在会为这些属性发出事件。
[orm] [bug] ¶
修复了以下错误:如果版本计数器没有实际递增,并且基表上的其他值也没有修改,那么与联接表继承一起使用的编程版本计数器将失败,因为更新将有一个空的set子句。由于版本计数器未递增的编程版本_ID是一个有文档记录的用例,因此现在检测到这个特定条件,更新会将版本_ID值设置为自身,以便继续进行并发检查。
References: #3996
[orm] [bug] ¶
版本控制功能不支持版本计数器为空。如果版本ID是编程的,并且为更新设置为空,则现在会引发异常。请代戴安娜·克拉克提出请求。
References: #3673
[orm] [bug] ¶
从中删除了一个非常旧的关键字参数 scoped_session
打电话 scope
. 这个关键字从未被记录下来,并且是允许可变范围的早期尝试。
References: #3796
[orm] [bug] ¶
修复了将“with_多态性”加载与指定joinedload with innerjoin=true的子类链接关系结合在一起的错误,将这些“innerjoin”降级为“outerjoin”,以适应不支持该关系的其他多态类。这既适用于单个继承多态负载,也适用于联合继承多态负载。
References: #3988
[orm] [bug] ¶
添加了新参数 with_for_update
到 Session.refresh()
方法。当 Query.with_lockmode()
方法已弃用,取而代之的是 Query.with_for_update()
, the Session.refresh()
方法从未更新以反映新选项。
References: #3991
[orm] [bug] ¶
修正了错误 column_property()
它也被标记为“deferred”,在刷新过程中会被标记为“expired”,导致它与常规属性的未到期一起加载,即使从未访问过该属性。
References: #3984
[orm] [bug] ¶
修复了子查询“预加载”中自我引用关系的“join_depth”参数无法正确处理的错误,加载所有可用的深度级别,而不是正确计算指定的预加载级别数。
References: #3967
[orm] [bug] ¶
向LRU“编译缓存”添加了警告 Mapper
(最终将用于其他基于ORM的LRU缓存)这样,当缓存开始达到其大小限制时,应用程序将发出警告,表明这是一种性能下降的情况,可能需要注意。如果应用程序使用的是无限数量的 Engine
对象,它是反模式。否则,这可能会建议一个应该引起SQLAlchemy开发人员注意的问题。
[orm] [bug] ¶
修正了在相关实体的延迟加载之后生效的加载程序选项的特殊性问题,以便加载程序选项将与别名或非别名实体匹配,如果这些选项包括实体信息,则更具体地说。
References: #3963
[orm] [bug] ¶
这个 flag_modified()
函数现在提升 InvalidRequestError
如果命名的属性键不在对象中,则假定它存在于刷新过程中。若要在不引用任何特定属性的情况下将对象标记为“脏的”,请 flag_dirty()
可以使用函数。
References: #3753
[orm] [bug] ¶
所使用的“评估”策略 Query.update()
和 Query.delete()
当主键/外键列的属性名与列的实际名称不匹配时,现在可以将多对一关系与实例进行简单的对象比较。以前,这将进行一个简单的基于名称的匹配,并以attributeError失败。
References: #3366
[orm] [bug] ¶
这个 @validates
decorator现在允许decorated方法从尚未与现有集合进行比较的“批量收集集”操作接收对象。这允许将传入值转换为兼容的ORM对象,因为已经允许从“append”事件中进行转换。注意这意味着 @validates
为调用方法 all 集合分配期间的值,而不仅仅是新值。
References: #3896
[orm] [bug] ¶
修复了单表继承中的错误,在将行限制为子类时,不考虑select_from()参数。以前,只考虑请求列中的表达式。
References: #3891
[orm] [bug] ¶
将集合分配给由关系映射的属性时,上一个集合不再可变。以前,旧集合将与触发的“item remove”事件一起清空;现在事件将在不影响旧集合的情况下触发。
References: #3913
[orm] [bug] ¶
的状态 Session
当 SessionEvents.after_rollback()
事件将发出,即对象过期前的属性状态。这与 SessionEvents.after_commit()
在对象的属性状态过期之前发出的事件。
References: #3934
[orm] [bug] ¶
固定错误在哪里 Query.with_parent()
如果 Query
反对 aliased()
构造而不是常规映射类。同时添加新参数 with_parent.from_entity
到独立的 with_parent()
功能以及 Query.with_parent()
.
References: #3607
[orm] [declarative] [bug] ¶
修复了使用中的错误 declared_attr
关于一个 AbstractConcreteBase
其中一个特定的返回值是一些未映射的符号,包括 None
,将导致属性仅硬计算一次并将值存储到对象字典,而不允许它调用子类。这种行为在以下情况下是正常的 declared_attr
在映射类上,而不在mixin或abstract类上发生。自从 AbstractConcreteBase
是“抽象的”和实际的“映射的”,这里有一个特殊的异常情况,以便“抽象的”行为优先于 declared_attr
.
References: #3848
[engine] [feature] ¶
添加了本地“悲观断开”处理到 Pool
对象。新参数 Pool.pre_ping
,可从发动机组件获得 create_engine.pool_pre_ping
,应用池文档中的“pre-ping”配方的有效形式,在每次连接签出时,都会发出一条简单的语句(通常为“select 1”),以测试连接的活动性。如果现有连接不再能够响应命令,则该连接将被透明地回收,并且在当前时间戳之前进行的所有其他连接都将失效。
References: #3919
[engine] [bug] ¶
添加了一个异常处理程序,当的“autorollback”功能 Connection
它本身引发了一个异常。在py3k中,解释器自然会报告这两个异常,一个发生在处理另一个异常的过程中。这将继续回滚失败处理的一系列更改,这些更改是作为 #2696 1.0.12。
This change is also backported to: 1.1.7
References: #3946
[engine] [bug] ¶
修正了在异常情况下通过 Compiled
对象直接指向 Connection.execute()
的方言 Compiled
没有为字符串语句的paramStyle查询生成的对象,而是假定它与方言级别的paramStyle匹配,从而导致不匹配。
References: #3938
[sql] [feature] ¶
添加了一种新的 bindparam()
称为“扩张”。这是用来 IN
表达式,其中元素列表在语句执行时而不是在语句编译时呈现为单个绑定参数。这既允许将单个绑定参数名链接到多个元素的In表达式,也允许将查询缓存与In表达式一起使用。新特性允许“select-in”加载和“polymorphic-in”加载的相关特性利用烘焙的查询扩展来减少调用开销。此功能应被视为 实验的 1.2。
References: #3953
[sql] [feature] [mysql] [oracle] [postgresql] ¶
在上添加了对SQL注释的支持 Table
和 Column
对象,通过新的 Table.comment
和 Column.comment
争论。这些注释作为DDL的一部分包含在表创建中,可以是内联的,也可以通过适当的alter语句来包含,并且还可以在表反射中以及通过 Inspector
. 目前支持的后端包括mysql、postgresql和oracle。非常感谢Frazer McLean在这方面所做的大量努力。
References: #1546
[sql] [feature] ¶
长期的行为 ColumnOperators.in_()
和 ColumnOperators.notin_()
修改了当右侧条件为空序列时发出警告的运算符;修改了“1”的简单“静态”表达式!=1“或”1=1“现在默认呈现,而不是拉入原始的左侧表达式。这将导致空列与空集的比较结果从空变为真/假。该行为是可配置的,并且可以使用 create_engine.empty_in_strategy
参数到 create_engine()
.
References: #3907
[sql] [feature] ¶
添加了一个新选项 autoescape
对于比较器的“startswith”和“endswith”类,这提供了一个转义字符,并自动将其应用于通配符“%”和“u”的所有出现。请代戴安娜·克拉克提出请求。
注解
自1.2.0起,此功能已从1.2.0b2中的初始实现更改为自动转义,以便自动转义现在作为布尔值传递,而不是作为转义字符使用的特定字符。
References: #2694
[sql] [bug] ¶
修复了在 WithinGroup
在结构迭代期间构造。
This change is also backported to: 1.1.11
References: #4012
[sql] [bug] ¶
由于 #3859 其中对表达式的“右侧”评估的调整基于 Variant
为了遵守底层类型的“右侧”规则,导致 Variant
在这种情况下,当我们 do 希望将左侧类型直接传输到右侧,以便可以将绑定级别规则应用于表达式的参数。
This change is also backported to: 1.1.9
References: #3952
[sql] [bug] [postgresql] ¶
改变了 ResultProxy
无条件地延迟“自动关闭”步骤,直到 Connection
对对象执行;如果postgresql on conflict with returning不返回任何行,则在以前不存在的用例中会发生autoclose,导致插入/更新/删除时无条件发生的常规autocommit行为失败。
This change is also backported to: 1.1.9
References: #3955
[sql] [bug] ¶
类型强制规则 Numeric
, Integer
和日期相关的类型现在包含其他逻辑,这些逻辑将尝试保留“已解析”类型上传入类型的设置。目前的目标是 asdecimal
标记,以便 Numeric
或 Float
和 Integer
将保留“asdecimal”标志,如果类型应为 Float
子类。
References: #4018
[sql] [bug] [mysql] ¶
结果处理器 Float
类型现在无条件地在 float()
处理器,如果方言指定它也支持“本机十进制”模式。而大多数后端将交付python float
对象对于浮点数据类型,MySQL后端在某些情况下缺少键入信息,以便提供并返回 Decimal
除非浮点转换完成。
References: #4020
[sql] [bug] ¶
对传递给SQL语句的python“float”值的处理增加了一些额外的严格性。“float”值将与 Float
数据类型而不是十进制强制 Numeric
数据类型和以前一样,消除了在sqlite上发出的混淆警告以及不必要的强制小数。
References: #4017
[sql] [bug] ¶
所有比较运算符(如like、is、in、match、equals、greater than、less than等)的运算符优先级都已合并到一个级别,因此使用这些运算符的表达式将在它们之间产生括号。这适用于Oracle、MySQL等数据库所述的运算符优先级,这些数据库将所有这些运算符放在同等优先级,以及PostgreSQL(从9.5开始),后者也使其运算符优先级变平。
References: #3999
[sql] [bug] ¶
修复了使用的表达式类型的问题 ColumnOperators.is_()
或者类似的类型不是“Boolean”类型,而是“NullType”,以及对非类型化表达式使用自定义比较运算符时。这种类型可以影响表达式在更大的上下文以及结果行处理中的行为。
References: #3873
[sql] [bug] ¶
修正了A的否定 Label
构造以使内部元素在 not_()
修饰符应用于带标签的表达式。
References: #3969
[sql] [bug] ¶
SQL语句中用于转义的百分号“翻倍”的系统已经得到了改进。百分比符号的“加倍”主要与 literal_column
构造和运算符 ColumnOperators.contains()
现在基于所使用的dbapi的所述参数样式发生;对于postgresql和mysql驱动程序常见的百分比敏感参数样式,将发生翻倍,对于其他类似sqlite的类型,则不会发生翻倍。这允许更多的数据库不可知的使用 literal_column
建造成为可能。
References: #3740
[sql] [bug] ¶
修正了列级错误 CheckConstraint
如果sqltext是一个核心表达式而不仅仅是一个普通字符串,那么使用底层方言编译器编译SQL表达式以及应用适当的标志以内联方式生成文本值将失败。这是很久以前在0.9中为表级检查约束修复的,作为 #2742 它更常用于核心SQL表达式,而不是纯字符串表达式。
References: #3957
[sql] [bug] ¶
修复了在“预执行”代码路径中插入时,如果SQL本身是非类型化表达式(如纯文本),则面向SQL的Python侧列默认值可能无法正确执行的错误。“pre-execute”代码路径非常少见,但是在不使用返回时,它可以应用于具有SQL默认值的非整数主键列。
References: #3923
[sql] [bug] ¶
按列级别呈现的用于排序的表达式 collate()
和 ColumnOperators.collate()
当名称区分大小写时(例如,具有大写字符),现在作为标识符引用。请注意,这不会影响类型级别的排序规则,该排序规则已被引用。
References: #3785
[sql] [bug] ¶
修复了使用 Alias
列上下文中的对象在试图将自己分组到带圆括号的表达式中时会引发参数错误。使用 Alias
这样一来,还不是一个完全支持的API,但是它适用于一些最终用户配方,并且在支持未来的PostgreSQL特性方面可能具有更突出的作用。
References: #3939
[schema] [bug] ¶
安 ArgumentError
如果一个 ForeignKeyConstraint
对象是用不匹配的“本地”列和“远程”列创建的,否则会导致约束的内部状态不正确。注意,这也会影响方言的反射过程为外键约束生成一组不匹配的列的条件。
This change is also backported to: 1.1.10
References: #3949
[postgresql] [bug] ¶
继续修复1.1.8中发布的正确处理PostgreSQL版本字符串“10devel”,额外的regexp bump处理形式为“10beta1”的版本字符串。虽然PostgreSQL现在提供了更好的方法来获取这些信息,但是我们坚持使用regexp至少1.1.x,以尽可能减少与旧版或备用PostgreSQL数据库兼容的风险。
This change is also backported to: 1.1.11
References: #4005
[postgresql] [bug] ¶
修复了使用中的错误 ARRAY
对于具有排序规则功能的字符串类型,排序规则将无法在创建表中生成正确的语法。
This change is also backported to: 1.1.11
References: #4006
[postgresql] [bug] ¶
为grant、revoke关键字添加了“autocommit”支持。拉扯请求由雅各布·海斯提供。
This change is also backported to: 1.1.10
[postgresql] [bug] ¶
增加了对“PostgreSQL 10devel”等开发版本的PostgreSQL版本字符串解析的支持。请示肖恩·麦卡利。
This change is also backported to: 1.1.8
[postgresql] [bug] ¶
修正了基础 ARRAY
数据类型不会调用的绑定/结果处理器 ARRAY
.
References: #3964
[postgresql] [bug] ¶
在反映PostgreSQL时添加了对所有可能的“字段”标识符的支持 INTERVAL
数据类型,例如“年”、“月”、“日到分钟”等。此外, INTERVAL
数据类型本身现在包含一个新参数 INTERVAL.fields
其中可以指定这些限定符;在反射/检查时,限定符也会反射回生成的数据类型。
References: #3959
[mysql] [feature] ¶
添加了对mysql的重复键更新的支持mysql特定 Insert
对象。请示迈克尔·多罗宁。
References: #4009
[mysql] [bug] ¶
MySQL5.7已经为“show variables”命令引入了权限限制;现在,当show不返回行时,MySQL方言将处理,特别是对于SQL_模式的初始提取,并且将发出一条警告,提示用户权限应该修改,以允许该行出现。
This change is also backported to: 1.1.11
References: #4007
[mysql] [bug] ¶
删除了一个古老且不必要的对UTC时间戳mysql函数的截取,这妨碍了它与参数一起使用。
This change is also backported to: 1.1.10
References: #3966
[mysql] [bug] ¶
修复了MySQL方言中在呈现创建表时与分区选项一起呈现表选项的错误。与分区相关的选项需要遵循表选项,而以前没有强制执行此顺序。
This change is also backported to: 1.1.10
References: #3961
[mysql] [bug] ¶
在调用时,添加了对由于表定义过时而无法恢复的视图的支持 MetaData.reflect()
;对无法响应的表发出警告 DESCRIBE
,但操作成功。
References: #3871
[mssql] [bug] ¶
修复了使用Azure数据仓库时必须从其他视图提取SQL Server事务隔离的错误,现在对这两个视图都尝试查询,如果失败继续提供对新SQL Server版本中未来任意API更改的最佳恢复能力,则无条件地引发NotImplemented。
This change is also backported to: 1.1.11
References: #3994
[mssql] [bug] ¶
添加了占位符类型 XML
到SQL Server方言,以便将包含此类型的反射表重新呈现为创建表。该类型没有特殊的往返行为,当前也不支持其他限定参数。
This change is also backported to: 1.1.11
References: #3973
[mssql] [bug] ¶
现在,SQL Server方言允许在数据库和/或所有者名称中使用点,在所有者周围的字符串中显式使用括号,也可以选择数据库名称。此外,发送 quoted_name
架构名称的构造不会在点上拆分,并将作为“所有者”传递完整的字符串。 quoted_name
现在也可以从 sqlalchemy.sql
导入空间。
References: #2626
[oracle] [feature] [postgresql] ¶
添加新关键字 Sequence.cache
和 Sequence.order
到 Sequence
,以允许呈现Oracle和PostgreSQL理解的缓存参数,以及Oracle理解的顺序参数。拉车请求由David Moore提供。
This change is also backported to: 1.1.12
[oracle] [feature] ¶
Oracle方言现在在使用时检查唯一和检查约束 Inspector.get_unique_constraints()
, Inspector.get_check_constraints()
. 因为Oracle没有独立于 Index
,A Table
这反映了我们仍然没有 UniqueConstraint
与之关联的对象。拉车请求由Eloy Felix提供。
References: #4003
[oracle] [bug] ¶
当使用6.0b1或更高版本的dbapi时,对两阶段事务的支持已完全删除。在任何情况下,两阶段功能在cx_Oracle 5.x下都不可用,cx_Oracle 6.x删除了此功能所依赖的连接级别“two phase”标志。
This change is also backported to: 1.1.11
References: #3997
[oracle] [bug] ¶
修正了cx_-oracle方言中的错误,cx_-oracle 6.0b1版的版本字符串解析将因“b”字符而失败。版本字符串解析现在通过regexp而不是简单的拆分。
This change is also backported to: 1.1.10
References: #3975
[oracle] [bug] ¶
cx_oracle方言现在支持“SANE多行计数”,即通过dbapi执行一系列参数集时。 cursor.executemany()
我们可以利用 cursor.rowcount
验证匹配的行数。在检测并发修改场景时,这会对ORM产生影响,因为现在可以检测到一些简单的条件,即使ORM正在批处理语句,而且当使用更严格的版本控制功能时,ORM仍然可以使用语句批处理。该标志为cx_oracle启用,假设至少为5.0版,这现在很常见。
References: #3932
[oracle] [bug] ¶
Oracle反射现在“规范化”为外键约束指定的名称,也就是说,对于不区分大小写的名称,将其作为全部小写返回。这已经是索引、主键约束以及所有表名和列名的行为。这将允许Alembic自动生成脚本在最初指定为不区分大小写时正确比较和呈现外键约束名。
References: #3276
[feature] [ext] ¶
增加新标志 Session.enable_baked_queries
到 Session
允许在会话范围内禁用烘焙查询,从而减少内存使用。还增加了新的 Bakery
包装使面包店 BakedQuery.bakery
可以检查。
[bug] [ext] ¶
在声明性类被垃圾收集并且新的automap prepare()操作同时进行的情况下,防止将“none”作为类进行测试,很少碰到在GC之后没有完全执行的weakref。
This change is also backported to: 1.1.10
References: #3980
[bug] [ext] ¶
固定错误 sqlalchemy.ext.mutable
何处 Mutable.as_mutable()
方法不会跟踪已使用 TypeEngine.copy()
. 与1.0相比,这在1.1中更像是回归,因为 TypeDecorator
类现在是的子类 SchemaEventTarget
其中一件事向父母表明 Column
当 Column
是。在混合类或抽象类中使用声明性时,这些副本很常见。
This change is also backported to: 1.1.8
References: #3950
[bug] [ext] ¶
增加了对绑定参数的支持,例如通常通过 Query.params()
,到 Result.count()
方法。以前,对参数的支持被省略了。拉请求由帕特·迪根提供。
This change is also backported to: 1.1.8
[bug] [ext] ¶
这个 AssociationProxy.any()
, AssociationProxy.has()
和 AssociationProxy.contains()
比较方法现在支持到属性的链接,该属性本身也是 AssociationProxy
,递归地。
References: #3769
[bug] [ext] ¶
实施就地突变操作 __ior__
, __iand__
, __ixor__
和 __isub__
对于 MutableSet
和 __iadd__
对于 MutableList
因此,当使用这些mutator方法更改集合时,将触发变更事件。
References: #3853
[bug] [declarative] ¶
如果 declared_attr.cascading
修饰符与声明性属性一起使用,声明性属性本身声明在要映射的类上,而不是声明性mixin类或 __abstract__
班级。这个 declared_attr.cascading
修饰符当前仅适用于mixin/abstract类。
References: #3847
[bug] [ext] ¶
改进了关联代理列表集合,以便在以下情况下防止对新创建的关联对象进行过早的自动刷新: list.append()
正在使用,并且当关联代理访问端点集合时将调用延迟加载。现在,在调用创建者以生成关联对象之前,首先访问端点集合。
References: #3941
[bug] [ext] ¶
这个 sqlalchemy.ext.hybrid.hybrid_property
类现在支持像 @setter
, @expression
在子类中多次,现在提供了一个 @getter
突变子,这样一个特定的杂交可以跨子类或其他类重新调整用途。这现在符合 @property
在标准python中。
[bug] [ext] ¶
修复了 sqlalchemy.ext.serializer
“带注释”的SQL元素(由ORM为许多类型的SQL表达式生成)无法可靠序列化的扩展。还将序列化程序的默认pickle级别提升为“最高_协议”。
References: #3918
flambé! the dragon and The Alchemist image designs created and generously donated by Rotem Yaari.
Created using Sphinx 4.2.0.