Release: 1.4.25 | Release Date: September 22, 2021

SQLAlchemy 1.4 Documentation

更改和迁移

1.2换热器

1.2.19

Released: April 15, 2019

orm

  • [orm] [bug]

    修正了1.2中由于引入了关系惰性加载器的烘焙查询而导致的回归,在生成memoized属性中出现的“lazy子句”期间会创建一个竞争条件。如果两个线程同时初始化memoized属性,则可以使用绑定参数键生成烘焙查询,然后在下次运行时用新键替换这些参数键,从而导致延迟加载查询,该查询将相关条件指定为 None . 修复程序确定在生成新子句和参数对象之前参数名是固定的,这样每次名称都是相同的。

    References: #4507

examples

  • [examples] [bug]

    修复了大型结果集示例中的错误,其中由于代码重新格式化而重新命名的“id”变量导致测试失败。拉请求由Matt Schuchhardt提供。

    References: #4528

engine

  • [engine] [bug]

    比较的两个对象 URL 使用 __eq__() 未考虑端口号,仅端口号不同的两个对象被视为相等。端口比较现已添加到 __eq__() 方法 URL ,端口号不同的对象现在不相等。此外, __ne__() 没有为实现 URL!= 在python2中使用,因为python2中的比较运算符之间没有隐含的关系。

    References: #4406

mssql

  • [mssql] [bug]

    当隔离级别更改为快照后,会发出commit(),因为pyodbc和pymssql都打开了一个隐式事务,该事务会阻止后续SQL在当前事务中发出。

    References: #4536

oracle

  • [oracle] [bug]

    增加了对反射的支持 NCHAR 将数据类型添加到Oracle方言,并添加 NCHAR 到Oracle方言导出的类型列表。

    References: #4506

1.2.18

Released: February 15, 2019

orm

  • [orm] [bug]

    修正了1.2中的一个回归,其中通配符/load_only loader选项对使用_type()限制到特定子类的加载程序路径不能正确工作。到目前为止,该修复仅适用于简单子类的type(),而不是将在单独的问题中解决的具有u多态性的实体;后一种情况不太可能在以前起作用。

    References: #4468

  • [orm] [bug]

    修复了相当简单但关键的问题,其中 SessionEvents.pending_to_persistent() 不仅当对象从挂起移动到持久化时,而且当它们也已经持久化并且刚刚被更新时,将为对象调用事件,从而在每次更新时为所有对象调用事件。

    References: #4489

sql

mysql

  • [mysql] [bug]

    修正了由 #4344 (第一个是 #4361 ,它围绕着mysql的88718问题工作,在该问题中,使用的下套管函数对于使用OSX/Windows套管约定的python 2不正确,这将导致 TypeError . 这个逻辑已经添加了完整的覆盖范围,所以在所有版本的Python上,每一个代码路径都以一种模拟的方式执行所有三种大小写约定。MySQL8.0同时解决了88718问题,因此解决方法仅适用于特定范围的MySQL8.0版本。

    References: #4492

sqlite

  • [sqlite] [bug]

    修复了sqlite ddl中的错误,其中使用表达式作为服务器端默认值要求它包含在括号中,以便sqlite解析器接受。拉车请求,由Bartlomiej Biernacki提供。

    References: #4474

mssql

  • [mssql] [bug]

    修复了SQL Server“标识插入”逻辑允许插入继续对标识列使用显式值的错误,该逻辑未检测到 Insert.values() 与包含 Column 作为键,SQL表达式作为值。

    References: #4499

1.2.17

Released: January 25, 2019

orm

postgresql

  • [postgresql] [bug]

    修改了反射检查约束时使用的查询,以使用 pg_get_constraintdef 函数,作为 consrc 第12页中的列已弃用。感谢约翰·史蒂文森给的小费。

    References: #4463

oracle

  • [oracle] [bug]

    修正了由于1.2中cx_Oracle方言的重构而导致的整数精度逻辑回归。我们现在不再将cx_oracle.native_int类型应用于发送整数值的结果列(检测为正精度,scale==0),该结果列遇到整数溢出问题,数值超过32位边界。相反,输出变量保持非类型化,以便cx_oracle可以选择最佳选项。

    References: #4457

1.2.16

Released: January 11, 2019

engine

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

sql

  • [sql] [bug] [mysql] [oracle]

    修复了为其发出DDL的问题 DropTableComment 即将发布的Alembic版本将使用的MySQL和Oracle数据库不正确。

    References: #4436

postgresql

  • [postgresql] [bug]

    固定问题,其中 ENUM 或者,如果枚举/域的名称或架构的名称需要引用,则在列反射中无法识别远程架构中存在的自定义域。一个新的解析方案现在可以完全解析带引号或不带引号的令牌,包括对SQL转义引号的支持。

    References: #4416

  • [postgresql] [bug]

    固定问题,多个 ENUM 相同引用的对象 MetaData 如果多个对象在不同的架构名称下具有相同的名称,则无法创建对象。PostgreSQL方言用于跟踪是否创建了特定的 ENUM 在DDL创建过程中,数据库中的模式名现在已考虑在内。

sqlite

  • [sqlite] [bug]

    现在跳过基于SQL表达式的索引反射,并发出警告,与PostgreSQL方言的反射方式相同,目前我们不支持反射包含SQL表达式的索引。以前,会生成一个列为“无”的索引,它会破坏像alembic这样的工具。

    References: #4431

misc

  • [no_tags]

    修复了“展开”功能中的问题,即在查询中多次使用同一绑定参数名会导致在重写查询中的参数的过程中出现keyError。

    References: #4394

1.2.15

Released: December 11, 2018

orm

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

  • [orm] [declarative] [bug]

    在以下情况下发出警告: column() 对象应用于声明性类,因为它可能是 Column 对象。

    References: #4374

misc

  • [no_tags]

    增加了对 write_timeout mysqlclient和pymysql接受的标志,将在URL字符串中传递。

    References: #4381

  • [no_tags]

    修复了将PostgreSQL域的反射表示为数组时无法识别的问题。拉请求由Jakub Synowiec提供。

    References: #4377, #4380

1.2.14

Released: November 10, 2018

orm

  • [orm] [bug]

    固定错误 Session.bulk_update_mappings() 如果替换映射属性名会导致UPDATE语句的主键列包含在SET子句中,也会导致WHERE子句;对于SQL Server,这通常是无害的,但可能会由于标识列而引发错误。这是修复的同一个bug的延续 #3849 如果测试不足以捕获这一额外的缺陷。

    References: #4357

  • [orm] [bug]

    修复了一个小的性能问题,在某些情况下,这可能会给结果提取增加不必要的开销,包括使用ORM列以及在查询中同时包含这些相同列的实体。当以不同的方式引用列时,这个问题与哈希/eq开销有关。

    References: #4347

mysql

  • [mysql] [bug]

    固定回归 #4344 在1.2.13中发布,其中修复了MySQL8.0在反射外键引用时引用列名的区分大小写问题,使用 information_schema.columns 查看。解决方法在OSX上失败/ lower_case_table_names=2 产生不匹配的套管 information_schema.columns 与之相比 SHOW CREATE TABLE ,因此,在不区分大小写的SQL模式中,现在使用不区分大小写的匹配。

    References: #4361

1.2.13

Released: October 31, 2018

orm

  • [orm] [bug]

    修正了“动态”加载器需要在查询的FROM子句中显式设置“secondary”表的错误,以适应secondary是一个连接对象的情况,否则不会单独从其列拉入查询。

    References: #4349

orm declarative

  • [orm] [declarative] [bug]

    固定回归 #4326 在1.2.12版中,使用 declared_attr 与混音器结合在一起 synonym() 无法将同义词正确映射到继承的子类。

    References: #4350

  • [orm] [declarative] [bug]

    列冲突解决技术在 declarative_column_conflicts 现在可用于 Column 这也是主键列。以前,在允许传递列副本之前,会检查在单个继承子类上声明的主键列。

    References: #4352

sql

postgresql

  • [postgresql] [bug]

    增加了对 aggregate_order_by 函数按元素接收多个订单,以前只接受一个元素。

    References: #4337

mysql

  • [mysql] [bug]

    附加字 function 到mysql的保留字列表,它现在是mysql 8.0中的关键字

    References: #4348

  • [mysql] [bug]

    为8.0系列中引入的mysql bug_88718添加了一个变通方法,其中外键约束的反射没有报告引用列的正确大小写敏感度,从而导致在使用反射约束(例如使用automap扩展时)期间出错。为了检索正确的区分大小写的名称,解决方法向信息架构表发出额外的查询。

    References: #4344

misc

  • [misc] [bug]

    修复了实用程序语言助手内部的一部分向Python传递错误类型参数的问题。 __import__ 内置为要导入的模块列表。该问题在核心库中没有产生任何症状,但可能导致外部应用程序出现问题,这些外部应用程序重新定义了 __import__ 内置或其他仪器。拉式请求,由Joe Urciouoli提供。

  • [misc] [bug] [py3k]

    修正了由于python组织的变化而由python 3.7生成的额外警告 collectionscollections.abc 包装。以前的 collections 在版本1.2.11中修复了警告。请求请求由Xtreak提供。

    References: #4339

  • [bug] [ext]

    新增遗失 .index() 方法在关联代理扩展中列出基于关联的集合。

1.2.12

Released: September 19, 2018

orm

  • [orm] [bug]

    在weakref cleanup中为 InstanceState 对象以检查是否存在 dict 内置,以减少在解释器关闭期间发生这些清理时生成的错误消息。拉式请求,由罗穆拉德·布鲁内提供。

  • [orm] [bug]

    修复了使用 LateralQuery.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

  • [orm] [declarative] [bug]

    修正了当通过 @declared_attr 可在已映射类的子类上调用。这将导致一个属性,当在 Mapper.all_orm_descriptors .

    References: #4326

postgresql

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

oracle

  • [oracle] [bug]

    修正了cx_oracle 7.0的问题,其中oracle param.getValue()的行为现在返回一个列表,而不是单个标量值,从而破坏了整个核心和ORM的自动增量逻辑。dml_ret_array_val compatibility flag用于cx_oracle 6.3和6.4,以建立与7.0和forward的兼容行为,用于cx_oracle 6.2.1和之前的版本号检查返回到旧逻辑。

    References: #4335

misc

  • [bug] [ext]

    固定问题,其中 BakedQuery 不包括 Session 作为缓存键的一部分,使用自定义查询类时会导致不兼容,特别是 ShardedQuery 它有一些不同的参数签名。

    References: #4328

1.2.11

Released: August 20, 2018

orm declarative

  • [orm] [declarative] [bug]

    修复了以前未经测试的用例中的问题,允许声明性映射类从声明性基之外的类继承,包括它容纳未映射的中间类。未映射的中间类可以指定 __abstract__ ,现在已正确解释,或者中间类可以保持未标记状态,并且将在层次结构中检测到经典映射的基类。为了预测现有的场景,这些场景可能会混合到现有的声明性层次结构中,如果为一个给定的类检测到多个映射的基,那么现在会出现一个错误。

    References: #4321

sql

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

oracle

  • [oracle] [bug]

    对于cx-oracle,根据cx-oracle开发人员的建议,integer数据类型现在将绑定到“int”。以前,使用cx_oracle.number会导致cx_oracle 6.x系列的精度下降。

    References: #4309

misc

  • [bug] [py3k]

    开始从python 3.3及更高版本下的collections.abc导入“collections”,以实现python 3.8的兼容性。拉请求由纳撒尼尔骑士。

  • [no_tags]

    修复了表反射中用于sqlite数据库的“schema”名称不能正确引用架构名称的问题。请示菲利普·克劳德。

1.2.10

Released: July 13, 2018

orm

  • [orm] [bug]

    固定错误 Bundle 构造,当 Bundle 用作呈现的SQL的一部分,例如语句的ORDER BY或GROUP BY。

    References: #4295

  • [orm] [bug]

    1.2.9中的固定回归 #4287 在哪里使用 Load 选项与字符串通配符一起使用将导致类型错误。

    References: #4298

sql

  • [sql] [bug]

    修正了错误 Sequence 将在任何 Table 引用它,当序列也涉及到该表的服务器端默认值时,当使用 MetaData.drop_all() . 处理要通过非服务器端列默认函数删除的序列的步骤现在在删除表本身之后调用。

    References: #4300

1.2.9

Released: June 29, 2018

orm

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

  • [sql] [bug]

    1.2中的固定回归 #4147 在哪里 Table 它的一些索引列被重新定义为新的索引列,就像在反射期间或使用 Table.extend_existing ,这样 Table.tometadata() 方法在尝试复制这些索引时失败,因为它们仍然引用被替换的列。复制逻辑现在可以适应这种情况。

    References: #4279

mysql

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

  • [sqlite] [bug]

    修复了测试套件中的问题,其中sqlite 3.24添加了一个与typereflectiontest中的用法冲突的新保留字。拉式请求由Nils Philippsen提供。

mssql

  • [mssql] [bug]

    修复了MSSQL反射中的错误,当不同架构中的两个同名表具有相同的命名主键约束时,引用其中一个表的外键约束的列将翻倍,从而导致错误。请示肖恩·邓恩。

    References: #4288

  • [mssql] [bug] [py3k]

    修复了python 3下的SQL Server方言中的问题,在针对不包含“sys.dm_exec_sessions”或“sys.dm_pdw_nodes_exec_sessions”视图的非标准SQL Server数据库运行时,由于未绑定的本地错误,错误提升将失败。

    References: #4273

oracle

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

misc

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

1.2.8

Released: May 28, 2018

orm

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

  • [engine] [bug]

    修复了连接池问题,即如果在连接池的“返回时重置”序列和针对封闭打开的显式事务期间出现断开连接错误 Connection 对象(例如从调用 Session.close() 没有回滚、提交或调用 Connection.close() 不首先关闭用 Connection.begin() )将导致双重签入,从而导致同一连接的并发签出。双签入条件现在被断言完全阻止,并且特定的双签入场景已经被修复。

    References: #4252

  • [engine] [bug]

    修正了一个引用泄漏问题,在该问题中,由于存储了python 3字典键()使用的键视图,语句执行中使用的参数字典的值将仍然被“编译缓存”引用。拉请求由奥利维尔·格里塞尔提供。

sql

  • [sql] [bug]

    修复了将文本值解释为SQL表达式值时使用的“含糊不清的文本”错误消息会遇到元组值,并且无法正确格式化消息的问题。拉车请求由Miguel Ventura提供。

mssql

  • [mssql] [bug]

    修正了由 #4061 其中,SQL Server“位”类型将被视为“本机布尔”类型。这里的目标是避免在列上创建检查约束,但是更大的问题是位值的行为不像真/假常量,不能解释为独立表达式,例如“where<column>”。现在,SQL Server方言恢复为非本机布尔值,但带有一个额外的标志,仍然可以避免创建检查约束。

    References: #4250

oracle

  • [oracle] [bug]

    Oracle binary_float和binary_double数据类型现在参与到cx_oracle.setinputsizes()中,并沿本机_float传递,以支持NaN值。此外, BINARY_FLOATBINARY_DOUBLEDOUBLE_PRECISION 现在子类 Float ,因为这些是浮点数据类型,而不是十进制数据类型。这些数据类型已默认为 Float.asdecimal 标记为“假”与“什么”一致 Float 已经开始了。

    References: #4264

  • [oracle] [bug]

    BINARY_FLOATBINARY_DOUBLE 数据类型。

  • [oracle] [bug]

    改变了甲骨文的方言,当 Integer 类型正在使用中,cx_oracle.numeric类型是为setinputsizes()设置的。在sqlAlchemy 1.1和更早版本中,所有数字类型都无条件地传递了cx_oracle.numeric,在1.2中,为了获得更好的数字精度,删除了它。但是,对于整数,某些数据库/客户端设置将无法将布尔值true/false强制为整数,这会在使用sqlacalchemy 1.2时引入回归行为。总的来说,setinputsizes逻辑似乎需要更多的灵活性,所以这是一个开始。

    References: #4259

misc

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

1.2.7

Released: April 20, 2018

orm

  • [orm] [bug]

    修正了1.2分片查询功能中的回归,即在搜索标识映射以查找相关的多对一元素时,新的“标识标记”元素没有在延迟加载操作的范围内被正确考虑。新的行为将允许使用“ID选择器”,以便确定从标识映射中检索到的最佳标识密钥。为了实现这一点,1.2的“身份标记”方法的一些重构对 ShardedQuery 应该注意这一类的其他派生。

    References: #4228

  • [orm] [bug]

    修复了单继承加载中的问题,即对单个继承子类使用别名实体,并结合 Query.select_from() 方法将导致SQL与混合到查询中的未负责任表一起呈现,从而导致笛卡尔积。尤其是在针对单个继承子类使用时,这会影响新的“selectin”加载程序。

    References: #4241

sql

  • [sql] [bug]

    修正了使用“literal_binds”选项编译insert语句的问题,该选项也使用显式序列和“inline”生成,如postgresql和oracle,这将无法在序列处理例程中容纳额外的关键字参数。

    References: #4231

postgresql

  • [postgresql] [feature]

    添加了新的PG类型 REGCLASS 这有助于将表名转换为OID值。拉请求由塞巴斯蒂安银行提供。

    References: #4160

  • [postgresql] [bug]

    修复了在与python相比时,postgresql“range”数据类型(如daterage)的特殊“not equals”运算符将无法呈现“is not null”的错误。 None 价值。

    References: #4229

mssql

  • [mssql] [bug]

    修正了由 #4060 其中用于反映SQL Server跨架构外键的查询错误地限制了条件。

    References: #4234

oracle

  • [oracle] [bug]

    如果精度为空且小数位数为零,则Oracle数字数据类型将反映为整数,因为这是从Oracle表中反映出来的整数值的返回方式。拉车请求由肯特鲍尔提供。

1.2.6

Released: March 30, 2018

orm

  • [orm] [bug]

    修复了使用中的错误 Mutable.associate_with()Mutable.as_mutable() 与使用其他命名属性设置了非主映射器的类一起使用会产生属性错误。由于非主映射器不用于持久性,可变扩展现在将非主映射器从其检测步骤中排除。

    References: #4215

engine

  • [engine] [bug]

    修复了连接池中的错误,即如果以前的“connect”处理程序引发异常,则连接可能会出现在池中而不调用其所有“connect”事件处理程序;请注意,方言本身具有发出SQL的连接处理程序,例如设置事务隔离的处理程序,如果数据库不可用,则可能失败。le状态,但仍允许连接。如果连接处理程序中的任何一个失败,那么连接将首先失效。

    References: #4225

sql

  • [sql] [bug]

    修复了从上一个修复到 #4204 在版本1.2.5中,其中在 CTE.alias() 已调用的方法不能正确引用自身。

    References: #4204

postgresql

  • [postgresql] [feature]

    在PostgreSQL表定义中添加了对“分区依据”的支持,使用“PostgreSQL分区依据”。拉请求由VSEvolod Solovyov提供。

mssql

  • [mssql] [bug]

    已将pyodbc的SQL Server版本检测调整为仅允许数字标记,过滤掉非整数,因为方言与此值进行元组-数字比较。在任何情况下,对于所有已知的SQL Server/pyodbc驱动程序,这通常都是正确的。

    References: #4227

oracle

  • [oracle] [bug]

    支持的最低cx_Oracle版本为5.2(2015年6月)。以前,方言是针对5.0版的,但是从1.2.2版开始,我们使用了一些直到5.2版才出现的符号。

    References: #4211

misc

  • [bug] [declarative]

    删除了在调用时发出的警告 __table_args____mapper_args__ 用A命名 @declared_attr 方法,当从未映射的声明性mixin调用时。在映射类上重写这些方法之一时,直接调用这些方法被记录为要使用的方法。对于常规属性名,仍会发出警告。

    References: #4221

1.2.5

Released: March 6, 2018

orm

  • [orm] [feature]

    添加了新功能 Query.only_return_tuples() . 导致 Query 对象无条件返回键化的元组对象,即使查询是针对单个实体的。拉请求提供埃里克阿特金。

  • [orm] [bug]

    修复了新的“多态选择素”加载中的错误,即当从关系延迟加载程序中部分加载选定的多态对象时,会导致加载中出现“空入”条件,从而导致“内联”形式的“入”错误。

    References: #4199

  • [orm] [bug]

    修正了1.2回归,其中包含 AliasedClass 对象,使用 QueryableAttribute.of_type() 方法,无法腌制。1.1的行为是从路径中省略别名类对象,因此恢复此行为。

    References: #4209

sql

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

postgresql

  • [postgresql] [bug] [py3k]

    修正了postgresql collate/array-adjustment中的错误,该错误在 #4006 其中,python 3.7正则表达式中的新行为导致修复失败。

    This change is also backported to: 1.1.18

    References: #4208

mysql

  • [mysql] [bug]

    MySQL方言现在使用 SELECT @@version 明确地发送给服务器,以确保我们得到了正确的版本信息。像maxscale这样的代理服务器会干扰传递给dbapi的connection.server版本值的值,因此这不再可靠。

    This change is also backported to: 1.1.18

    References: #4205

1.2.4

Released: February 22, 2018

orm

  • [orm] [bug]

    修正了ORM版本控制特性中的1.2回归,其中映射 select()alias() 还对基础表使用版本控制列的操作将失败,因为作为 #3673 .

    References: #4193

engine

  • [engine] [bug]

    1.2.3中由于修复自而导致的固定回归 #4181 事件系统的变更涉及 EngineOptionEngine 不适应事件删除,这将导致 AttributeError 在类级别调用时。

    References: #4190

sql

  • [sql] [bug]

    修正了当给定名称区分大小写或需要引用时,CTE表达式不会引用其名称或别名的错误。拉请求提供埃里克阿特金。

    References: #4197

1.2.3

Released: February 16, 2018

orm

  • [orm] [feature]

    添加了新参数 set_attribute.inititatorset_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

  • [engine] [bug]

    修复了事件与 Engine 在课堂上,当 Engine.execution_options() 使用方法。为了实现这一点,半私有阶级 OptionEngine 不再直接在类级别接受事件并将引发错误;类只从其父级传播类级别事件 Engine . 实例级事件继续像以前一样工作。

    References: #4181

  • [engine] [bug]

    这个 URL 对象现在允许多次指定查询键,这些键的值将被加入到列表中。这是为了支持在 CreateEnginePlugin 哪些文档可以多次传递“plugin”。此外,可以将插件名称传递给 create_engine() 使用新的 create_engine.plugins 参数。

    References: #4170

sql

  • [sql] [feature]

    为添加了支持 Enum 在使用python pep-435样式的枚举对象时,保留枚举的值,而不是键。用户提供了一个可调用函数,该函数将返回要持久化的字符串值。这允许对非字符串值的枚举也是可持久的值。请示乔恩·斯奈德。

    References: #3906

  • [sql] [bug]

    修正了错误 Enum 当多个键引用同一个值时,类型无法正确处理枚举“别名”。拉请求由丹尼尔·康奈尔提供。

    References: #4180

postgresql

  • [postgresql] [bug]

    将“ssl syscall error:operation timed out”添加到触发psycopg2驱动程序“disconnect”方案的消息列表中。拉车请求由Andr_Cruz提供。

    This change is also backported to: 1.1.16

  • [postgresql] [bug]

    在PostgreSQL方言接受的关键字列表中添加了“truncate”作为“autocommit”-触发关键字。拉扯请求由雅各布·海斯提供。

    This change is also backported to: 1.1.16

sqlite

  • [sqlite] [bug]

    修复了平台既没有安装pysqlite2也没有安装sqlite3时引发的导入错误,从而引发了与sqlite3相关的导入错误,而不是pysqlite2错误,后者不是实际的失败模式。拉请求礼貌罗宾。

oracle

  • [oracle] [feature]

    外键的on-delete选项现在是Oracle反射的一部分。Oracle不支持更新级联。拉请求由Miroslav Shubernetsky提供。

  • [oracle] [bug]

    修复了cx-oracle断开连接检测中的错误,由pre-ping和其他功能使用,其中一个错误可能作为数据库错误引发,其中包含一个数字错误代码;以前我们没有在本例中检查断开连接代码。

    References: #4182

misc

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

1.2.2

Released: January 24, 2018

orm

  • [orm] [bug]

    修正了1.2关于新批量替换事件的回归,当批量分配将对象分配给新所有者时,backref将无法从前一个所有者中删除对象。

    References: #4171

mysql

  • [mysql] [bug]

    在mysql方言中添加了更多mysql 8.0保留字,用于引用。拉式请求,由Riccardo Magliocchetti提供。

mssql

  • [mssql] [bug]

    将ODBC错误代码10054添加到错误代码列表中,这些错误代码被视为ODBC/MSSQL服务器的断开连接。

    References: #4164

oracle

  • [oracle] [bug]

    当nvarchar2数据类型(与sqltypes.unicode()对应的sqlAlchemy)正在使用时,cx_Oracle方言现在无条件地使用cx_Oracle.nchar调用setinputsizes()。根据cx-oracle的作者,这允许在Oracle客户机中进行正确的转换,而不管nls-uncharacterset的设置如何。

    References: #4163

1.2.1

Released: January 15, 2018

orm

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

  • [sql] [bug]

    固定错误 Insert.values() 其中结合使用“多值”格式 Column 对象作为键而不是字符串将失败。拉车请求由Aubrey Stark Toller提供。

    This change is also backported to: 1.1.16

    References: #4162

mssql

  • [mssql] [bug]

    修正了1.2中的回归,其中新修复的排序规则名称引用 #3785 中断SQL Server,它显式地不理解带引号的排序规则名称。混合大小写排序规则名称是否被引用现在被推迟到方言级别的决定,以便每个方言可以直接准备这些标识符。

    References: #4154

oracle

  • [oracle] [bug]

    修正了从cx_Oracle方言中删除大多数setinputsizes规则会影响timestamp数据类型检索小数秒的能力的回归。

    References: #4157

  • [oracle] [bug]

    修正了Oracle导入中缺少逗号导致出现未定义符号的回归。拉请求由Miroslav Shubernetsky提供。

misc

  • [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>”的测试,这似乎不适用于至少两种第三方方言。

1.2.0

Released: December 27, 2017

orm

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

  • [orm] [declarative] [bug]

    修复了一个缺陷,其中描述符位于基于 AbstractConcreteBase 在刷新操作期间被引用,导致错误,因为属性未映射为映射器属性。对于其他属性(如由添加的“type”列),也可能出现类似的问题。 AbstractConcreteBase 但是,如果类未能在其映射器中包含“concrete=true”,则此处的检查也应防止该场景导致问题。

    This change is also backported to: 1.1.15

    References: #4124

engine

  • [engine] [feature]

    的“密码”属性 URL 对象现在可以是任何响应Python的用户定义或用户子类字符串对象。 str() 建筑。传递的对象将保持为数据成员 URL.password_originalURL.password 读取属性以生成字符串值。

    References: #4089

sql

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

postgresql

  • [postgresql] [feature]

    新增 MONEY 数据类型。拉请求由克莱伯J桑托斯提供。

mysql

  • [mysql] [bug]

    MySQL5.7.20现在警告使用@tx_隔离变量;现在执行版本检查并使用@transaction_隔离来防止此警告。

    This change is also backported to: 1.1.15

    References: #4120

  • [mysql] [bug]

    修正了1.2.0b3版本的回归,其中“mariadb”版本比较可能会对python 3下的某些特定mariadb版本字符串失败。

    References: #4115

mssql

  • [mssql] [bug]

    修复了sqltypes.binary和sqltypes.varbinary数据类型不包含正确的pyodbc绑定值处理程序的错误,该处理程序允许传递pyodbc.nullparam值,这有助于freetds。

    References: #4121

oracle

  • [oracle] [bug]

    添加了一些附加规则以完全处理 Decimal('Infinity')Decimal('-Infinity') 使用时使用cx_Oracle数字的值 asdecimal=True .

    References: #4064

misc

  • [misc] [feature]

    在文档中添加了一个新的错误部分,其中包含有关常见错误消息的背景信息。在sqlAlchemy中选择的异常将在其字符串输出中包含指向此页中相关部分的链接。

  • [enhancement] [ext]

    添加了新方法 Result.with_post_criteria() 为了烘焙查询系统,允许在从缓存中提取查询后进行非SQL修改转换。除此之外,此方法可用于 ShardedQuery 设置碎片标识符。 ShardedQuery 也被修改为 ShardedQuery.get() 方法与的方法正确交互 Result .

    References: #4135

1.2.0b3

Released: October 13, 2017

orm

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

orm declarative

  • [orm] [declarative] [bug]

    如果子类试图重写在超类上声明的属性,并使用 @declared_attr.cascading 将忽略被重写的属性。如果没有更复杂的开发工作,这个用例就不能被完全支持到更进一步的子类,因此为了一致性,“级联”一直保持下去,而不考虑覆盖属性。

    References: #4091

  • [orm] [declarative] [bug]

    如果 @declared_attr.cascading 属性与特殊的声明性名称一起使用,例如 __tablename__ ,因为这没有效果。

    References: #4092

engine

  • [engine] [feature]

    补充 __next__()next() 方法到 ResultProxy ,以便 next() 内置函数直接作用于对象。 ResultProxy 早就有了 __iter__() 方法,该方法已允许它对 iter() 建筑。实施 __iter__() 是不变的,因为性能测试表明使用 __next__() 方法与 StopIteration 在python 2.7和3.6中都慢了20%。

    References: #4077

  • [engine] [bug]

    做了一些调整 PoolConnection 这样,恢复逻辑不会在异常捕获下运行 pool.EmptyAttributeError ,因为当恢复操作本身失败时,python 3会创建一个引用 Empty / AttributeError 作为原因,当这些异常捕获实际上是控制流的一部分时。

    References: #4028

sql

postgresql

  • [postgresql] [feature]

    添加了新标志 use_batch_mode 到psycopg2方言。此标志允许使用psycopg2 psycopg2.extras.execute_batchEngine 呼吁 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

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

sqlite

  • [sqlite] [bug]

    修正了当引用的表在远程模式中时,SQLite检查约束反射会失败的错误,例如在SQLite上,ATTACH引用的远程数据库。

    This change is also backported to: 1.1.15

    References: #4099

mssql

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

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

1.2.0b2

Released: July 24, 2017

orm

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

misc

  • [bug] [py3k] [tests]

    修复了测试夹具中的问题,该问题与自python 3.6.2起涉及上下文管理器的更改不兼容。

    This change is also backported to: 1.1.12, 1.0.18

    References: #4034

1.2.0b1

Released: July 10, 2017

orm

  • [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() 当在刷新中刷新时,现在会为这些属性发出事件。

    References: #3471, #3472

  • [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_updateSession.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]

    的状态 SessionSessionEvents.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

  • [orm] [declarative] [bug]

    修复了使用中的错误 declared_attr 关于一个 AbstractConcreteBase 其中一个特定的返回值是一些未映射的符号,包括 None ,将导致属性仅硬计算一次并将值存储到对象字典,而不允许它调用子类。这种行为在以下情况下是正常的 declared_attr 在映射类上,而不在mixin或abstract类上发生。自从 AbstractConcreteBase 是“抽象的”和实际的“映射的”,这里有一个特殊的异常情况,以便“抽象的”行为优先于 declared_attr .

    References: #3848

engine

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

  • [sql] [feature]

    添加了一种新的 bindparam() 称为“扩张”。这是用来 IN 表达式,其中元素列表在语句执行时而不是在语句编译时呈现为单个绑定参数。这既允许将单个绑定参数名链接到多个元素的In表达式,也允许将查询缓存与In表达式一起使用。新特性允许“select-in”加载和“polymorphic-in”加载的相关特性利用烘焙的查询扩展来减少调用开销。此功能应被视为 实验的 1.2。

    References: #3953

  • [sql] [feature] [mysql] [oracle] [postgresql]

    在上添加了对SQL注释的支持 TableColumn 对象,通过新的 Table.commentColumn.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]

    类型强制规则 NumericInteger 和日期相关的类型现在包含其他逻辑,这些逻辑将尝试保留“已解析”类型上传入类型的设置。目前的目标是 asdecimal 标记,以便 NumericFloatInteger 将保留“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

  • [schema] [bug]

    ArgumentError 如果一个 ForeignKeyConstraint 对象是用不匹配的“本地”列和“远程”列创建的,否则会导致约束的内部状态不正确。注意,这也会影响方言的反射过程为外键约束生成一组不匹配的列的条件。

    This change is also backported to: 1.1.10

    References: #3949

postgresql

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

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

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

  • [oracle] [feature] [postgresql]

    添加新关键字 Sequence.cacheSequence.orderSequence ,以允许呈现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

misc

  • [feature] [ext]

    增加新标志 Session.enable_baked_queriesSession 允许在会话范围内禁用烘焙查询,从而减少内存使用。还增加了新的 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 其中一件事向父母表明 ColumnColumn 是。在混合类或抽象类中使用声明性时,这些副本很常见。

    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中。

    References: #3911, #3912

  • [bug] [ext]

    修复了 sqlalchemy.ext.serializer “带注释”的SQL元素(由ORM为许多类型的SQL表达式生成)无法可靠序列化的扩展。还将序列化程序的默认pickle级别提升为“最高_协议”。

    References: #3918

Previous: 1.3换热器 Next: 1.1换热器