Release: 1.4.25 | Release Date: September 22, 2021

SQLAlchemy 1.4 Documentation

更改和迁移

1.3换热器

1.3.25

no release date

orm

  • [orm] [bug]

    已修复中的问题 Session.bulk_save_objects() 当与持久对象一起使用时,持久对象将无法跟踪主键列名与属性名不同的映射的主键。

    References: #6392

schema

  • [schema] [bug]

    这个 Table 对象现在如果在实例化时没有至少传递 Table.nameTable.metadata 位置论据。以前,如果将这些作为关键字参数传递,对象将无法正确初始化。

    References: #6135

postgresql

  • [postgresql] [bug] [regression]

    修复了由以下原因导致的回归 #6023 其中PostgreSQL CAST运算符应用于 ARRAY 时,如果数据类型也嵌入到 Variant 适配器。

    此外,还修复了对在使用 Variant(ARRAY(some_schema_type))

    References: #6182

mysql

  • [mysql] [bug] [mariadb]

    修复以适应MariaDB 10.6系列,包括MariaDB连接器Python驱动程序(仅在SQLAlChemy 1.4上受支持)以及mysqlclient DBAPI自动使用的本机10.6客户端库(同时适用于1.3和1.4)中的向后不兼容更改。当编码声明为“utf8”时,这些客户端库现在会报告“utf8mb3”编码符号,从而导致在MySQL方言中不需要该符号的查找和编码错误。对MySQL基本库进行更新,以适应报告的utf8mb3符号以及测试套件。感谢格奥尔格·里希特的支持。

    References: #7115, #7136

sqlite

  • [sqlite] [bug]

    添加有关URL中传递的pysqlcipher的加密相关编译指示的注释。

    References: #6589

1.3.24

Released: March 30, 2021

orm

  • [orm] [bug]

    删除了声明PASSIVE_DELETES不适用于多对一关系的非常旧的警告。虽然很可能在许多情况下,将此参数放在多对一关系上并不是预期的结果,但在某些用例中,可能不允许在这种关系之后使用DELETE CASCADE。

    References: #5983

  • [orm] [bug]

    修复了以下问题:如果其中一个表具有不相关且无法解析的外键约束,则连接两个表的过程可能会失败 NoReferenceError 在联接进程内,但是可以绕过它以允许联接完成。在过程中测试异常重要性的逻辑将对将失败的构造进行假设。

    References: #5952

  • [orm] [bug]

    修复了以下问题: MutableComposite 由于复合属性的刷新处理程序将对象替换为可变扩展未处理的新对象,因此当父对象已加载时,构造可能会被置于无效状态,然后被后续查询覆盖。

    References: #6001

engine

  • [engine] [bug]

    修复了在直接执行的用例中无法考虑“SCHEMA_TRANSLATE_MAP”功能的错误 DefaultGenerator 对象,如序列,其中包括当禁用IMPLICIT_RETURNING时,为了生成主键值而“预执行”它们的情况。

    References: #5929

schema

  • [schema] [bug]

    修复了作为某种组合首次引入的错误 #2892#2919 NND #3832 其中, TypeDecorator 将对“impl”类加倍,如果“impl”也是 SchemaType 。现实世界的案例是任何 TypeDecorator 反对 EnumBoolean 会得到双倍的报酬 CheckConstraintcreate_constraint=True 标志已设置。

    References: #6152

  • [schema] [bug] [sqlite]

    修复了由以下项生成的检查约束的问题 BooleanEnum 在第一次编译后将无法正确呈现命名约定,原因是指定给约束的名称中的状态发生意外更改。该问题在0.9版本中首次引入,即对问题#3067的修复,该修复修订了当时采取的方法,该方法似乎比所需的更复杂。

    References: #6007

  • [schema] [bug]

    修复/实现了对使用列名/键等作为约定一部分的主键约束命名约定的支持。具体地说,这包括 PrimaryKeyConstraint 对象,该对象自动与 Table 将其名称更新为新的主键 Column 对象先添加到表中,然后添加到约束中。现在适应与该约束构造过程相关的内部故障模式,包括不存在列、不存在名称或存在空白名称。

    References: #5919

  • [schema] [bug]

    调整了发出DROP语句的逻辑 Sequence 对象删除多个表,以便所有 Sequence 对象将在所有表之后删除,即使给定的 Sequence 仅与 Table 对象,而不是直接到整体 MetaData 对象。用例支持相同的功能 Sequence 与多个关联 Table 一次一次。

    References: #6071

postgresql

  • [postgresql] [bug]

    修复了使用 aggregate_order_by 在某些条件下会返回数组(NullType),从而影响结果对象正确返回数据的能力。

    References: #5989

  • [postgresql] [bug] [reflection]

    修复了PostgreSQL反射中的问题,其中表示“NOT NULL”的列将取代对应域的空性。

    References: #6161

  • [postgresql] [bug] [types]

    调整了mental copg2方言,以便为包含数组元素的绑定参数发出显式PostgreSQL样式的强制转换。这允许所有数据类型在数组中正常运行。异步方言已经在最后一条语句中生成了这些内部强制转换。这还包括支持阵列切片更新以及特定于PostgreSQL的 ARRAY.contains() 方法。

    References: #6023

mssql

  • [mssql] [bug] [reflection]

    修复了旧SQL Server 2005版本的SQL Server反射问题,如果没有EXEC关键字前缀,对sp_column的调用将无法正常进行。目前的1.4系列不使用此方法。

    References: #5921

1.3.23

Released: February 1, 2021

sql

postgresql

  • [postgresql] [bug]

    仅对于SQLAlChemy 1.3,setup.py将pg8000引脚到低于1.16.6的版本。SQLAlChemy 1.4支持1.16.6版及更高版本。朱塞佩·卢米亚提供的请求。

    References: #5645

  • [postgresql] [bug]

    修复了使用 Table.to_metadata() (称为 Table.tometadata() 在1.3中)与PostgreSQL结合使用 ExcludeConstraint 使用即席列表达式的数据将无法正确复制。

    References: #5850

mysql

  • [mysql] [usecase]

    投射到 FLOAT 现在MySQL>=(8,0,17)和MariaDB>=(10,4,5)中支持。

    References: #5808

  • [mysql] [bug] [reflection]

    修复了MySQL服务器默认反射对于存在负号的数字值将失败的错误。

    References: #5860

  • [mysql] [bug]

    修复了MySQL方言中的长期错误,在MySQL方言中,对于所有类型的约束(而不仅仅是索引)的名称,最大标识符长度255太长,所有约束的大小都限制为64。由于元数据命名约定可能会在此区域中创建过长的名称,因此应对DDL编译器内的标识符生成器应用限制。

    References: #5898

  • [mysql] [bug]

    修复了因PyMySQL 1.0版本而出现的弃用警告,包括“db”和“passwd”参数现在替换为“database”和“password”的弃用警告。

    References: #5821

  • [mysql] [bug]

    修复了因修复以下项而导致的SQLAlChemy 1.3.20的回归问题 #5462 根据后端的要求,它为索引中的MySQL函数表达式添加了双圆括号,这在不经意间扩展到包括任意 text() 表达式以及Alembic的内部文本组件,这是Alembic对于不包含双圆括号的任意索引表达式所需的。检查范围已缩小,仅直接包括二进制/一元/函数表达式。

    References: #5800

oracle

  • [oracle] [bug]

    修复了由引入的Oracle方言中的回归 #4894 在SQLAlChemy 1.3.11中,当任意SQL表达式不是列时,由于检查“SERVER_DEFAULT”,在返回更新时使用SQL表达式将无法编译。

    References: #5813

  • [oracle] [bug]

    修复了Oracle方言中通过以下方式检索CLOB/BLOB列的错误 Insert.returning() 将失败,因为返回时需要读取LOB值;此外,修复了通过在Python2下返回来检索Unicode值的支持。

    References: #5812

misc

  • [bug] [ext]

    修复了在尝试生成“密钥”时有时调用的字符串规范化的问题 .c 如果列是使用 sqlalchemy.ext.compiler 扩展,并且没有提供默认的编译形式;虽然这似乎是一种不寻常的情况,但它可以在某些ORM场景中调用,比如当表达式在“order by”中与联接的紧急加载结合使用时。问题是缺省编译器函数的缺失引发了 CompileError 而不是 UnsupportedCompilationError

    References: #5836

1.3.22

Released: December 18, 2020

oracle

  • [oracle] [bug]

    修复了由于以下原因而发生的回归问题 #5755 它实现了对Oracle的隔离级别支持。据报道,许多Oracle帐户实际上没有查询 v$transaction 视图,因此此功能已更改为在数据库连接失败时优雅地回退,其中方言将假定“READ COMMITTED”为缺省隔离级别,就像SQLAlChemy 1.3.21之前的情况一样。但是,显式使用 Connection.get_isolation_level() 方法现在必须引发异常,因为具有此限制的Oracle数据库显式不允许用户读取当前隔离级别。

    References: #5784

1.3.21

Released: December 17, 2020

orm

  • [orm] [bug]

    对于将映射类或字符串映射类名传递到的情况,添加了全面检查和信息性错误消息 relationship.secondary 。这是一个非常常见的错误,需要一个明确的信息。

    此外,还向类注册表解析添加了新规则,以便对于 relationship.secondary 参数时,如果映射的类及其表具有相同的字符串名称,则 Table 在解析此参数时将优先考虑。在所有其他情况下,如果类和表共享相同的名称,则继续优先使用该类。

    References: #5774

  • [orm] [bug]

    修复了中的错误 Query.update() 其中,对象位于 _ormsession.Session 那些已经过期的,在被“评估”同步战略刷新时,将不必要地被单独挑选。

    References: #5664

  • [orm] [bug]

    修复了涉及 restore_load_context ORM事件选项,如 InstanceEvents.load() 使得该标志不会被携带到在事件处理程序首次建立之后映射的子类。

    References: #5737

sql

  • [sql] [bug]

    如果返回()方法(如 Insert.returning() 被多次调用,因为它尚不支持加法运算。版本1.4将支持这方面的加法运算。此外,任何组合的 Insert.returning()ValuesBase.return_defaults() 方法现在会引发错误,因为这些方法是互斥的;以前,操作会以静默方式失败。

    References: #5691

  • [sql] [bug]

    修复了一些结构编译器的问题,例如MySQL/PostgreSQL“on conflict/on duplicate key”将依赖于 Compiler 对象的语句被固定为顶层语句,如果这些语句从不同的上下文分支,例如链接到SQL语句的DDL构造,则这将失败。

    References: #5656

postgresql

  • [postgresql] [usecase]

    添加了新参数 ExcludeConstraint.opsExcludeConstraint 对象,以支持具有此约束的运算符类规范。拉请求礼貌阿隆门泽。

    References: #5604

  • [postgresql] [bug] [mysql]

    修正了1.3.2中为PostgreSQL方言引入的回归,也复制到了1.3.18中MySQL方言的特性,其中 Table 构造如 text() 作为 Select.with_for_update.of 在PostgreSQL或MySQL编译器中无法正确容纳。

    References: #5729

mysql

  • [mysql] [bug] [reflection]

    修复了以下问题:仅在值中包含小数点的MariaDB上反映服务器默认值将无法正确反映,从而导致缺少任何服务器默认值的映射表。

    References: #5744

  • [mysql] [sql]

    将缺少的关键字添加到 RESERVED_WORDS MySQL方言列表: actionlevelmodestatustexttime . 请求请求由Oscar Batori提供。

    References: #5696

sqlite

  • [sqlite] [usecase]

    补充 sqlite_with_rowid=False 方言关键字,以允许将表创建为 CREATE TABLE WITHOUT ROWID . 补丁由肖恩·安德森提供。

    References: #5685

mssql

  • [mssql] [bug]

    修复了CREATE INDEX语句在以下情况下无法正确呈现的错误 mssql-includemssql_where 都是指定的。拉请求礼貌@Adiorz。

    References: #5751

  • [mssql] [bug]

    将SQL Server代码“01000”添加到断开连接代码列表中。

    References: #5646

  • [mssql] [reflection] [sqlite]

    修正了复合主键列未按正确顺序报告的问题。补丁提供@fulpm。

    References: #5661

oracle

1.3.20

Released: October 12, 2020

orm

  • [orm] [bug]

    ArgumentError 如果的目标参数 Query.join() 设置为未映射对象。在此更改之前 AttributeError 被养大了。拉蒙·威廉姆斯的请求。

    References: #4428

  • [orm] [bug]

    修正了这样一个问题,即对实际上不是映射属性的字符串属性名(如纯Python描述符)使用loader选项会引发不具格式的AttributeError;现在会引发描述性错误。

    References: #4589

engine

  • [engine] [bug]

    修复了将非字符串对象发送到 SQLAlchemyError 或者一个子类,如某些第三方方言所发生的那样,将不能正确地串接。拉请求礼貌的安德热巴托辛斯基。

    References: #5599

  • [engine] [bug]

    修复了一个不使用SQLAlchemy标准后期导入系统的函数级导入sql炼金术.exc模块。

    References: #5632

sql

  • [sql] [bug]

    固定问题 pickle.dumps() 反对的行动 Over 构造将产生递归溢出。

    References: #5644

  • [sql] [bug]

    修复了在 column() 被添加到多个 table() 一次。这对 ColumnTable 物体。一个 ArgumentError 现在在发生这种情况时引发。

    References: #5618

postgresql

  • [postgresql] [usecase]

    psycopg2方言现在支持PostgreSQL多主机连接,方法是将主机/端口组合传递给查询字符串。拉蒙·威廉姆斯的请求。

    References: #4392

  • [postgresql] [bug]

    调整了 Comparator.any()Comparator.all() 方法实现用于求反的直接“NOT”操作,而不是对比较运算符求反。

    References: #5518

  • [postgresql] [bug]

    固定问题 ENUM 在测试期间发出CREATE-type或DROP-type以查看该类型是否存在时,类型不会参考架构转换映射。此外,修复了这样一个问题:如果在单个DDL序列中多次遇到同一个枚举,“check”查询将重复运行,而不是依赖缓存值。

    References: #5520

mysql

  • [mysql] [usecase]

    调整了MySQL方言,使其正确插入MySQL 8所接受的函数索引表达式。拉蒙·威廉姆斯的请求。

    References: #5462

  • [mysql] [change]

    添加新的MySQL保留字: cubelateral 分别在MySQL8.0.1和8.0.14中添加;这表示如果用作表或列标识符名称,这些术语将被引用。

    References: #5539

  • [mysql] [bug]

    与一起使用的“skip_locked”关键字 with_for_update() 将在MariaDB后端使用时发出警告,然后将被忽略。在SQLAlchemy 1.4中,这是一种不推荐的行为,因为请求“skip locked”的应用程序正在寻找在这些后端上不可用的非阻塞操作。

    References: #5568

  • [mysql] [bug]

    修正了这样一个错误:如果没有where子句,针对使用MySQL多表格式的JOIN的UPDATE语句将无法包含目标表的表前缀,因为只有where子句被扫描以检测在该特定点的“多表更新”。如果目标是一个联接,那么它现在也会被扫描,以获取最左边的表作为主表,将附加的条目作为附加的FROM条目。

    References: #5617

mssql

  • [mssql] [bug]

    修复了Azure DW的SQLAlchemy连接URI authentication=ActiveDirectoryIntegrated (并且没有用户名+密码)没有以azuredw实例可以接受的方式构造ODBC连接字符串。

    References: #5592

misc

  • [bug] [pool]

    修复了以下池参数未传播到创建的新池时出现的问题 Engine.dispose() 被称为: pre_pinguse_lifo . 另外 recyclereset_on_return 参数现在传播给 AssertionPool 班级。

    References: #5582

  • [bug] [associationproxy] [ext]

    当试图将关联代理元素用作要从SQL函数中选择或在SQL函数中使用的纯列表达式时,将引发一个信息错误;当前不支持此用例。

    References: #5541, #5542

  • [bug] [tests]

    修复了针对Pytest 6.x运行时测试套件中的不兼容性。

    References: #5635

1.3.19

Released: August 17, 2020

orm

  • [orm] [usecase]

    调整了 Mapper.all_orm_descriptors() 访问器,以确定的方式按属性的位置顺序表示属性,假设使用python3.6或更高版本,该版本根据类属性的声明方式维护类属性的排序顺序。但是,这种排序并不保证在所有情况下都与声明的属性顺序相匹配;请参阅方法文档以了解确切的方案。

    References: #5494

orm declarative

  • [orm] [declarative] [usecase]

    使用时使用的虚拟列的名称 AbstractConcreteBaseConcreteBase 现在可以自定义类,以允许具有实际命名的列的模型 type . 请求请求由Jesse Bakker提供。

    References: #5513

sql

  • [sql] [bug]

    修复了以下问题:在某些情况下,如果将表达式括在带圆括号的分组中,则呈现标签名称而不是完整表达式的“ORDER BY”子句将无法出现(这对于SQL Server特别重要)。此案例已添加到测试支持中。这一更改还调整了ORM查询的“当存在DISTINCT时自动按列添加顺序”行为(在1.4中已被弃用),以便更准确地检测已经存在的列表达式。

    References: #5470

  • [sql] [bug] [datatypes]

    这个 LookupError 消息现在将向用户提供最多四个可能的值,通过 Enum . 长度超过11个字符的值将被截断并替换为省略号。拉蒙·威廉姆斯的请求。

    References: #4733

  • [sql] [bug]

    固定问题 Connection.execution_options.schema_translate_mapSequence.next_value() 函数函数 SequenceColumn.server_default 参数和创建表DDL已发出。

    References: #5500

postgresql

  • [postgresql] [bug]

    修正了不同范围比较运算符的返回类型本身是相同的范围类型而不是布尔值的问题,这将导致在 TypeDecorator 定义的结果处理行为正在使用中。请求请求由Jim Bosch提供。

    References: #5476

mysql

  • [mysql] [usecase]

    对于没有FROM子句但有WHERE子句的SELECT语句,MySQL方言将从DUAL呈现。这允许像“select1whereexists(subquery)”之类的查询以及其他用例使用。

    References: #5481

  • [mysql] [bug]

    修正了CREATE TABLE语句未正确指定COLLATE关键字的问题。

    References: #5411

  • [mysql] [bug]

    将MariaDB代码1927添加到“断开连接”代码列表中,因为最近的MariaDB版本显然在数据库服务器停止时使用此代码。

    References: #5493

sqlite

  • [sqlite] [bug] [mssql] [reflection]

    对所有包含的方言进行扫描,以确保在查询系统表时正确转义包含单引号或双引号的名称 Inspector 接受对象名作为参数的方法(例如表名、视图名等)。SQLite和MSSQL包含两个已修复的引用问题。

    References: #5456

mssql

  • [mssql] [bug] [sql]

    错误地转义了mssql对象的方言名,其中错误地包含了错误的字符。

    References: #5467

misc

  • [usecase] [py3k]

    增加了一个 **kw 论据 DeclarativeMeta.__init__() 方法。允许类支持 PEP 487 元类钩 __init_subclass__ . 请求请求由Ewen Gillies提供。

    References: ##5357

1.3.18

Released: June 25, 2020

orm

examples

  • [examples] [change]

    新增选项 --raw 致示例.性能它将转储原始配置文件测试,以供任意数量的分析可视化工具使用。删除了“runsnake”选项,因为现在很难构建runsnake;

engine

  • [engine] [bug]

    对中修复的“重置”代理的进一步改进 #5326 ,它现在在未正确调用时发出警告并更正行为。已经确定并修复了发出此警告的其他情况。

    References: #5326

  • [engine] [bug]

    固定问题 URL 对象,其中对对象进行字符串化不会对特殊字符进行URL编码,从而防止URL被重新用作实际URL。请求请求由米格尔·格林伯格提供。

    References: #5341

sql

  • [sql] [usecase]

    将“.schema”参数添加到 table() 构造,允许特别表表达式也包含架构名称。请求请求由Dylan Modesitt提供。

    References: #5309

  • [sql] [change] [sybase]

    补充 .offset 支持sybase方言。拉请求由Alan D.Snow提供。

    References: #5294

  • [sql] [bug]

    在类型强制元素中正确应用selfu group。

    在表达式中使用时,类型强制元素未正确应用分组规则

    References: #5344

  • [sql] [bug]

    补充 Select.with_hint() 调用时生成的通用SQL字符串的输出 str() 一份声明。以前,假设这是方言特有的,就可以省略这个从句。提示文本显示在括号内,以指示这些提示的呈现方式因后端而异。

    References: #5353

  • [sql] [schema]

    介绍 IdentityOptions 存储序列和标识列的公共参数。

    References: #5324

schema

  • [schema] [bug]

    固定问题,其中 dialect_options 当数据库对象(例如。, Table )已使用复制 tometadata() .

    References: #5276

mysql

  • [mysql] [usecase]

    实现了对mysql的行级锁定支持。请求请求由昆廷·萨默维尔提供。

    References: #4860

sqlite

  • [sqlite] [usecase]

    SQLite 3.31增加了对计算列的支持。这一变化使他们能够在针对SQLite时在SQLAlchemy中提供支持。

    References: #5297

  • [sqlite] [bug]

    将“exists”添加到SQLite的保留字列表中,以便在用作标签或列名时引用该词。请求请求由Thodoris Sotiropoulos提供。

    References: #5395

mssql

  • [mssql] [change]

    感动了 supports_sane_rowcount_returning = False 来自 PyODBCConnector 水平 MSDialect_pyodbc 因为pyodbc在某些情况下可以正常工作。

    References: #5321

  • [mssql] [bug]

    改进了SQL Server方言所使用的逻辑,以解释包含许多点的多部分架构名称;如果名称没有使用方括号或引号,则不会实际丢失任何点;此外,还支持具有多个部分的“dbname”标记,包括它可能具有多个独立的方括号部分。

    References: #5364, #5366

  • [mssql] [bug] [pyodbc]

    修正了pyodbc连接器中的一个问题,当使用完全空的URL时,会发出关于pyodbc“drivername”的警告。当生成未连接的方言对象或使用“creator”参数创建_engine()时,空URL是正常的。现在只有在驱动程序名丢失但其他参数仍然存在时才会发出警告。

    References: #5346

  • [mssql] [bug]

    修复了为pyodbc DBAPI组装ODBC连接字符串的问题。包含分号和/或大括号“{}”的标记未正确转义,导致ODBC驱动程序错误解释连接字符串属性。

    References: #5373

  • [mssql] [bug]

    固定问题,其中 datetime.time 参数正在转换为 datetime.datetime ,使它们与类似的比较不兼容 >= 与实际情况相反 TIME 列。

    References: #5339

  • [mssql] [bug]

    修复了以下问题: is_disconnect 当异常消息的子字符串与SQL Server ODBC错误代码匹配时,SQL Server pyodbc方言中的函数错误地报告断开连接状态。

    References: #5359

oracle

  • [oracle] [bug] [reflection]

    修正了Oracle方言中的错误,其中包含完整主键列集的索引会被误认为主键索引本身,即使存在多个索引,也会被忽略。该检查经过了改进,可以将主键约束的名称与索引名称本身进行比较,而不是根据索引中的列进行猜测。

    References: #5421

1.3.17

Released: May 13, 2020

orm

  • [orm] [usecase]

    添加了一个访问器 Comparator.expressions 它提供对多列下映射的列组的访问 ColumnProperty 属性。

    References: #5262

  • [orm] [usecase]

    介绍 relationship.sync_backref 关系中的标志,以控制是否添加了更改Python属性的同步事件。这将取代先前的更改 #5149 ,警告说 viewonly=True 不允许备份填充或backref配置的关系目标。

    References: #5237

  • [orm] [bug]

    修复了使用中的错误 with_polymorphic() 作为join via的目标 RelationshipComparator.of_type() 在映射器上,如果映射器已经有一个子查询,且该子查询的多态性设置与请求的设置相同,则无法在联接中正确地别名on子句。

    References: #5288

  • [orm] [bug]

    修复了加载程序选项(如selectinload()与烘焙查询系统交互的区域)中的问题,如果加载程序选项本身包含当前不兼容缓存的元素(如with_polymorphic()对象),则不会发生查询缓存。在这些场景中,baked loader有时不能完全失效,从而导致错过紧急加载。

    References: #5303

  • [orm] [bug]

    修改了内部“identity set”实现,该实现是一个将对象散列在id()上而不是散列值的集合,以便不实际调用 __hash__() 方法,这些对象通常是用户映射的对象。一些方法将此方法作为实现的副作用调用。

    References: #5304

  • [orm] [bug]

    当尝试对不是实际映射实例的对象进行ORM多对一比较时,将引发一条信息性错误消息。不支持与标量子查询的比较;使用 Comparator.has() .

    References: #5269

engine

  • [engine] [bug]

    修复了DBAPI连接在未回滚状态下仍可以返回到连接池的相当严重的问题。如果事务在未回滚或提交的情况下“关闭”,则负责回滚连接的重置代理可能已损坏,在某些情况下,当在涉及保存点的特定模式中使用ORM会话并发出.close()时,可能会发生这种情况。修复可确保重置代理始终处于活动状态。

    References: #5326

schema

  • [schema] [bug]

    修正了当 Index 在与表关联时延迟,例如当它包含 Column 与任何 Table 但是,如果它还包含非面向表的表达式,则无法正确附加。

    References: #5298

  • [schema] [bug]

    当使用 MetaData.sorted_tables 属性以及 sort_tables() 函数,并且由于外键约束之间存在循环依赖关系,无法正确排序给定的表。在这种情况下,函数将不再按外键对所涉及的表进行排序,并将发出警告。不属于循环一部分的其他表仍将按依赖关系顺序返回。以前,排序后的表例程将返回一个集合,当检测到循环时,该集合将无条件地忽略所有外键,并且不会发出警告。

    References: #5316

  • [schema]

    添加 comment 属性到 Column __repr__ 方法。

    References: #4138

postgresql

mssql

  • [mssql] [bug] [reflection]

    修正使用旧版TDS版本4.2时MSSQL中计算列的反射所引入的回归。方言将尝试检测first connect的协议版本,并在兼容模式下运行(如果无法检测到)。

    References: #5255

  • [mssql] [bug] [reflection]

    修复使用SQL server 2012之前的版本时MSSQL中计算列的反射引入的回归,该版本不支持 concat 功能。

    References: #5271

oracle

  • [oracle] [bug]

    对cxu oracle方言如何为LOB和numeric数据类型设置每列outputtype处理程序进行了一些修改,以适应cxu oracle 8中可能发生的更改。

    References: #5246

  • [oracle] [bug] [performance]

    更改了获取CLOB和BLOB对象的实现,使其使用cxU Oracle的本机实现来获取与其他结果列内联的CLOB/BLOB对象,而不是执行单独的获取。与往常一样,可以通过将auto_convert_lobs设置为False来禁用此功能。

    作为此更改的一部分,CLOB在INSERT时被赋予一个空白字符串,现在在SELECT时返回None,这与Oracle上的VARCHAR一致。

    References: #5314

firebird

  • [firebird] [change]

    调整方言加载 firebird:// 因此,如果安装了外部sqlalchemy firebird方言,则将使用它,否则将返回内部firebird方言(现已弃用)。

    References: #5278

1.3.16

Released: April 7, 2020

orm

  • [orm] [performance]

    修改了subqueryload和selectinload所使用的查询,使其不再按父实体的主键排序;这种排序是为了允许在输入行时直接将它们复制到列表中,只需使用最低级别的Python端排序规则。但是,这些ORDER BY子句可能会对查询的性能产生负面影响,因为在许多情况下,这些列派生自子查询,或者不是实际的主键列,因此SQL规划人员无法使用索引。Python端排序规则使用本机itertools.group U依据()来整理传入的行,并且已被修改为允许使用将每个父级的多个行组组合在一起列表.扩展Python()的性能应该相对较快。对于包含显式ORDER_BY参数的关系,仍将存在ORDER BY present,但是对于两种加载,这是唯一将添加到查询中的ORDER BY。

    References: #5162

  • [orm] [bug]

    固定错误 selectinload() 从同一个或两个以上的键加载程序中引用同一个或多个键加载程序的关系 with_polymorphic() 带有多个子类映射器的构造将无法分别调用每个子queryload,而是使用一个基于字符串的槽来阻止其他加载程序被调用。

    References: #5228

  • [orm] [bug]

    修正了当lazyload在目标多对一关系中使用session local“get”时,如果存在具有正确主键的对象,但它是同级类的实例,则当lazyLoader实际为该行发出加载时,不会正确返回None。

    References: #5210

orm declarative

  • [orm] [declarative] [bug]

    字符串参数被作为第一个位置参数接受 relationship() 函数在使用声明性API时不再使用Python解释 eval() 函数;相反,名称是点分隔的,名称直接在名称解析字典中查找,而不将值视为Python表达式。但是,将字符串参数传递给另一个 relationship() 必须接受Python表达式的参数仍将使用 eval() ;已对文件进行了澄清,以确保该文件的使用不存在歧义。

    参见

    关系论据的评估 -字符串求值的详细信息

    References: #5238

sql

  • [sql] [types]

    添加文字编译功能 DateTimeDateTime 当使用字符串方言进行调试时。这种变化不会影响保留当前行为的真实方言实现。

    References: #5052

schema

postgresql

  • [postgresql] [bug]

    修正了“覆盖”索引(例如,包含INCLUDE子句的索引)将反映为将INCLUDE子句中的所有列作为常规列包含在内的问题。如果检测到这些额外的列,指示它们当前被忽略,则会发出警告。注意,完全支持“覆盖”索引是 #4458 . 请求请求由Marat Sharafutdinov提供。

    References: #5205

mysql

  • [mysql] [bug]

    修正了MySQL方言在连接到ProxySQL提供的伪MySQL数据库时的问题,当它返回no row时,预先检查隔离级别不会阻止方言继续连接。将发出一个警告,说明无法检测到隔离级别。

    References: #5239

sqlite

  • [sqlite] [usecase]

    使用pysqlite时为SQLite实现了自动提交隔离级别。

    References: #5164

mssql

oracle

  • [oracle] [usecase]

    在使用cx_Oracle时为Oracle实现了自动提交隔离级别。还为Oracle添加了一个固定的默认隔离级别READ COMMITTED。

    References: #5200

  • [oracle] [bug] [reflection]

    修复了由修复引起的回归/错误修复 #5146 其中,Oracle方言从“all_tab_comments”视图中读取以获取表注释,但无法容纳所请求表的当前所有者,如果多个架构中存在多个同名表,则会导致读取错误的注释。

    References: #5146

misc

  • [bug] [tests]

    修复了一个阻止测试套件在最近发布的py.测试5.4.0条。

    References: #5201

  • [enum] [types]

    这个 Enum 类型现在支持该参数 Enum.length 通过设置指定在使用非本机枚举时要创建的VARCHAR列的长度 Enum.native_enumFalse

    References: #5183

  • [installer]

    确保pyproject.toml项目“文件不包括在构建中,因为这个文件的存在向pip表明应该使用pep-517安装过程。由于当前的工具/发行版似乎不太支持这种操作模式,所以在SQLAlchemy安装范围内,可以通过省略该文件来避免这些问题。

    References: #5207

1.3.15

Released: March 11, 2020

orm

  • [orm] [bug]

    已调整由发出的错误消息 Query.join() 当左手边找不到 Query.select_from() 解决问题的最好办法就是解决问题。此外,在1.3系列中,在从传递给 Query 所以每次都确定相同的表达式。

    References: #5194

  • [orm] [bug]

    1.3.14中的固定回归由于 #4849 其中a系统执行信息()调用在发生刷新错误时无法正确调用。已为此异常情况添加了测试覆盖率。

    References: #5196

1.3.14

Released: March 10, 2020

general

  • [general] [bug] [py3k]

    对从内部异常捕获中引发的大多数(如果不是全部)内部引发的异常应用了一个明确的“原因”,以避免误导stacktrace,因为stacktrace暗示异常处理过程中存在错误。而最好通过以下方式抑制内部捕获的异常 __suppress_context__ 属性,似乎还没有一种方法可以在不抑制封闭的用户构造的上下文的情况下做到这一点,因此目前它将内部捕获的异常公开为原因,以便保留有关错误上下文的完整信息。

    References: #4849

orm

  • [orm] [usecase]

    添加了新标志 InstanceEvents.restore_load_contextSessionEvents.restore_load_context 适用于 InstanceEvents.load()InstanceEvents.refresh()SessionEvents.loaded_as_persistent() 当事件发生后,事件的上下文将被称为“钩子”。这样可以确保对象保持在已在进行的加载操作的“加载程序上下文”中,而不是由于事件中可能发生的刷新操作而将对象传输到新的加载上下文中。当出现这种情况时,将发出警告,建议使用该标志来解决此问题。标记是“opt-in”,这样就不会给现有应用程序带来风险。

    此更改还增加了对 raw=True 会话生命周期事件的标志。

    References: #5129

  • [orm] [bug]

    修正了1.3.13中由 #5056 其中,ORM路径注册表系统的重构使得路径不再可以与空元组进行比较,而空元组可以出现在特定类型的联接的急加载路径中。“空元组”用例已经被解析,以便在所有情况下将路径注册表与路径注册表进行比较 PathRegistry 对象本身现在实现 __eq__()__ne__() 方法将对所有相等性进行比较,并在非预期的情况下继续成功- PathRegistry 对象进行比较,同时发出警告,指出此对象不应作为比较的主题。

    References: #5110

  • [orm] [bug]

    将关系设置为viewonly=True(也是back_填充或backref配置的目标)将发出警告,最终将被禁止。back_populates专门指属性或集合的变异,当属性服从viewonly=True时,这是不允许的。viewonly属性不受持久性行为的影响,这意味着当它在本地发生变化时,它将不能反映正确的结果。

    References: #5149

  • [orm] [bug]

    修正了在同一区域的另一个回归 #5080 通过在1.3.0b3中引入 #4468 其中,可以跨 with_polymorphic() 与具有多态性的基类相对的关系,然后再深入到常规映射关系中都会失败,因为基类组件不会以加载程序策略可以定位的方式将自身添加到加载路径中。应用于 #5080 进一步改进,以适应这种情况。

    References: #5121

engine

  • [engine] [bug]

    扩展了执行语句时游标/连接清理的范围,以包括无法构造结果对象、afteru cursor_execute()事件引发错误或autocommit/autoclose失败时。这允许在出现故障时清理DBAPI游标,而无连接执行允许关闭连接并将连接返回到连接池,在那里它以前一直等到垃圾回收触发池返回。

    References: #5182

sql

  • [sql] [bug] [postgresql]

    修正了一个错误,即不能直接从中选择同时使用RETURNING的INSERT/UPDATE/DELETE的CTE,因为编译器的内部状态会尝试将外部SELECT视为DELETE语句,并访问不存在的状态。

    References: #5181

postgresql

  • [postgresql] [bug]

    修正了“schema_translate_map”功能不能与PostgreSQL本机枚举类型(即。 EnumENUM )在这种情况下,虽然“CREATE TYPE”语句将使用正确的模式发出,但在引用枚举的点,该模式不会在CREATE TABLE语句中呈现。

    References: #5158

  • [postgresql] [bug] [reflection]

    修复了当SQL文本包含换行符时,检查约束的PostgreSQL反射将无法解析约束的错误。正则表达式已经过调整以适应这种情况。请求请求由Eric Borczuk提供。

    References: #5170

mysql

  • [mysql] [bug]

    修正了MySQL中的问题 Insert.on_duplicate_key_update() 构造,其中使用SQL函数或其他组合表达式作为列参数不会正确呈现 VALUES 围绕列本身的关键字。

    References: #5173

mssql

  • [mssql] [bug]

    固定问题 DATETIMEOFFSET 类型无法容纳 None 值,作为在中首次引入的此类型的修复系列的一部分引入的 #4983#5045 . 此外,还增加了对通过这种类型传递后端特定日期格式字符串的支持,就像大多数其他dbapi上的日期/时间类型通常允许的那样。

    References: #5132

oracle

  • [oracle] [bug]

    修正了一个反射错误,即只能为用户实际拥有的表检索表注释,而不能为用户可见但由其他人拥有的表检索表注释。请求请求由Dave Hirschfeld提供。

    References: #5146

misc

  • [usecase] [ext]

    将关键字参数添加到 MutableList.sort() 函数,以便可以提供键函数以及“reverse”关键字参数。

    References: #5114

  • [bug] [performance]

    作为内部测试结果的修订版 #5085 其中每个方言的测试相关模块将在使用该方言时无条件地加载,将SQLAlchemy的测试框架和ORM拉入模块导入空间。这只会在一定程度上影响初始启动时间和内存,但是最好不要让这些附加模块反向依赖于直接内核的使用。

    References: #5180

  • [bug] [installation]

    贩卖 inspect.formatannotation 内部函数 sqlalchemy.util.compat ,这是的供应商版本所需的 inspect.formatargspec . cPython中没有记录该函数,也不保证在将来的Python版本中可用。

    References: #5138

1.3.13

Released: January 22, 2020

orm

  • [orm] [performance]

    在系统中发现了一个性能问题,根据该问题,基于映射关系构造联接。子句自适应系统将用于大多数连接表达式,包括不需要调整的常见情况。这种自适应发生的条件已经被细化,使得在没有“辅助”表的简单关系中,平均无别名连接使用的函数调用减少了70%。

  • [orm] [bug] [engine]

    添加了测试支持,并修复了为短期对象创建的各种不必要的引用循环,主要是在ORM查询领域。非常感谢叶嘉信在这方面的帮助。

    References: #5050, #5056, #5071

  • [orm] [bug]

    修正了1.3.0b3中引入的加载程序选项的回归 #4468 其中可以使用 PropComparator.of_type() 将前面的关系引用的实体的继承子类的别名实体作为目标将无法生成匹配的路径。另请参见 #5082 在同一版本中修复了这一问题。

    References: #5107

  • [orm] [bug]

    修正了在1.3.0b3中引入的连接迫进加载的回归 #4468 其中,可以跨 with_polymorphic() 使用 RelationshipProperty.of_type() 然后,随着规则映射关系的进一步发展,多态子类将无法以加载程序策略定位的方式将自身添加到加载路径中。为了解决这个问题,我们做了一些调整。

    References: #5082

  • [orm] [bug]

    修复了在删除使用“版本号”功能的对象时ORM刷新过程中未被测试覆盖覆盖的警告。此警告通常无法访问,除非使用方言将“supports_sane_rowcount”标志设置为False,否则通常不会出现这种情况,但对于某些MySQL配置以及较旧的Firebird驱动程序,以及可能的某些第三方方言,都可能出现这种情况。

    References: #5068

  • [orm] [bug]

    修正了在以下情况下,使用联接的预先加载无法将查询正确包装在子查询内的错误 Query.group_by() 被用于查询。当使用任何一种结果限制方法时,例如DISTINCT、LIMIT、OFFSET、joined eager loading都会将行限制查询嵌入到子查询中,这样收集结果就不会受到影响。由于某些原因,GROUP BY的存在从未包含在该标准中,即使它与使用DISTINCT具有相似的效果。此外,对于大多数数据库平台来说,该缺陷将完全阻止对联接的紧急加载查询使用GROUP BY,这将禁止非聚合、非分组列出现在查询中,因为数据库不接受用于联接的紧急加载的其他列。

    References: #5065

engine

  • [engine] [bug]

    修复了在 Compiled 如果将“扩展入”参数与具有绑定值处理器的数据类型一起使用,则对象将发生变化;特别是,这意味着在使用语句缓存和/或烘焙查询时,将同时对同一个已编译的.u bind_processors集合进行变异。由于这些处理器每次对给定的绑定参数名称空间都是相同的函数,因此这个问题没有实际的负面影响,但是 Compiled 对象永远不应该引起其状态的任何更改,特别是考虑到一旦完全构造它们,它们就应该是线程安全的和可重用的。

    References: #5048

sql

  • [sql] [usecase]

    使用创建的函数 GenericFunction 现在可以用引号指定函数的名称,而不必使用引号 quoted_name 构造对象的.name元素。在1.3.4之前,引用从未应用于函数名,并且在中引入了一些引用 #4467 但没有办法强制引用一个混合的大小写名称。此外 quoted_name 构造函数作为名称使用时,将在函数注册表中正确注册其小写名称,以便通过 func. 登记处。

    References: #5079

postgresql

  • [postgresql] [usecase]

    添加了对前缀的支持 CTE 构造,以支持Postgresql 12“物化”和“未物化”短语。请求请求由Marat Sharafutdinov提供。

    参见

    HasCTE.cte()

    References: #5040

  • [postgresql] [bug]

    修正了PostgreSQL方言无法解析作为布尔值函数(而不是布尔值表达式)的反射的CHECK约束的问题。

    References: #5039

  • [postgresql] [tests]

    通过测试max_prepared_transactions是否设置为大于0的值,改进了PostgreSQL数据库的两阶段事务要求检测。请求请求由Federico Caselli提供。

    References: #5057

mssql

  • [mssql] [bug]

    修正了时区感知的问题 datetime 值被转换为字符串以用作 DATETIMEOFFSET 列省略了分数秒。

    References: #5045

misc

  • [bug] [ext]

    修复了中的错误sqlalchemy.ext.serializer一个独一无二的 BindParameter 如果对象存在于映射本身以及查询的筛选条件中,则该对象可能与自身冲突,因为一方将用于非反序列化版本,而另一方将使用反序列化版本。逻辑被添加到 BindParameter 类似于它的“clone”方法,它将在反序列化时取消验证参数名,这样它就不会与原始参数名冲突。

    References: #5086

  • [bug] [tests]

    修复了由于SQLite文件锁定问题以及连接池相关测试中的一些计时问题而导致的Windows测试失败;请求请求由Federico Caselli提供。

    References: #4946

1.3.12

Released: December 16, 2019

orm

  • [orm] [bug]

    固定问题涉及 lazy="raise" 一种策略,其中对象的ORM删除将引发一个简单的“use-get”样式的多对一关系,该关系配置了lazy=“raise”。这与1.3中作为 #4353 ,其中确定不希望发出SQL的历史记录操作应绕过 lazy="raise" 检查,并有效地将其视为 lazy="raise_on_sql" 对于这个案子。修复程序将调整lazy loader策略,使其在延迟加载被指示在对象不存在时不应发出SQL的情况下不引发。

    References: #4997

  • [orm] [bug]

    修复了1.3.0中引入的与中的关联代理重构相关的回归 #4351 阻止了 composite() 从引用它们的关联代理中工作的属性。

    References: #5000

  • [orm] [bug]

    将持久性相关标志设置为 relationship() 同时设置viewonly=True将发出常规警告,因为这些标志对于viewonly=True关系没有意义。尤其是,“层叠”设置有自己的警告,该警告是基于单个值生成的,例如“delete,delete orphan”,这些值不应应用于viewonly关系。但是请注意,在“级联”的情况下,即使将关系设置为“viewonly”,这些设置仍会错误地生效。在1.4中,为了解决这个问题,在viewonly=True关系上,所有与持久性相关的级联设置都将被禁止。

    References: #4993

  • [orm] [bug] [py3k]

    修正了当将集合作为切片分配给自身时,变异操作会失败,因为它会首先无意中删除分配的集合。注意,Python的赋值不应该只应用于Python中的一个操作,因为它不应该只生成一个事件 __setitem__ 在这种情况下不调用hook; __setslice__ 在所有情况下,它将逐项重新创建列表。

    References: #4990

  • [orm] [bug]

    修复了当事务的“开始”在核心引擎/连接级别失败(例如由于网络错误或数据库为某些事务性配方而锁定)时,在 Session 从连接池获取该连接,然后立即返回它,即ORM Session 不会关闭连接,尽管此连接未存储在 Session . 这将导致连接被垃圾回收中的连接池weakref处理程序清除,垃圾回收是一个未经预处理的代码路径,在某些特殊配置中,它可以在标准错误中发出错误。

    References: #5034

sql

  • [sql] [bug]

    修正了“distinct”关键字传递给 select() 不会将字符串值视为“标签引用”,方法与 select.distinct() 它会无条件地提高。此关键字参数和其他参数传递给 select() 最终将不推荐用于SQLAlchemy 2.0。

    References: #5028

  • [sql] [bug]

    将“无法解析标签引用”的异常文本更改为包括其他类型的标签强制,即“DISTINCT”也属于PostgreSQL方言下的此类。

sqlite

  • [sqlite] [bug]

    修复了SQLite为JSON数据类型分配“数值”亲和力的问题,首先在 添加了对sqlite json的支持 ,它将标量数值JSON值返回为数字,而不是可以JSON反序列化的字符串。SQLite特定的JSON反序列化器现在作为一个异常正常地降级,并绕过对单个数值的反序列化,因为从JSON的角度来看,它们已经反序列化了。

    References: #5014

mssql

  • [mssql] [bug]

    修复的支架 DATETIMEOFFSET 在PyODBC上添加PyODBC级别的结果处理程序,因为它不包括对该数据类型的本机支持。这包括使用python3“timezone”tzinfo子类来设置时区,在python2上,它使用了sqlalchemy.util.

    References: #4983

1.3.11

Released: November 11, 2019

orm

  • [orm] [usecase]

    添加访问器 Query.is_single_entity()Query ,它将指示 Query 将是ORM实体的列表,或实体或列表达式的元组。SQLAlchemy希望在将来的版本中改进单个实体/元组的行为,使行为在前面显式化,但是这个属性对于当前的行为应该是有帮助的。请求请求由Patrick Hayes提供。

    References: #4934

  • [orm] [bug]

    这个 relationship.omit_join 标志不打算手动设置为True,现在将在发生这种情况时发出警告。自动检测到omit_join优化,并且 omit_join flag仅用于在假设优化可能会干扰正确结果的情况下禁用优化,而此功能的现代版本并未观察到这一点。如果未自动检测到该标志,则将其设置为True可能会导致在使用非默认主连接条件时selectin加载功能无法正常工作。

    References: #4954

  • [orm] [bug]

    如果主键值传递给 Query.get() 所有主键列位置都不包含。以前,在元组之外传递一个None将引发一个 TypeError 传递一个复合None(None值的元组)将静默地传递。修复程序现在将单个None强制到一个tuple中,在那里它与其他None条件一致地处理。感谢Lev Izraelit在这方面的帮助。

    References: #4915

  • [orm] [bug]

    这个 BakedQuery 不会缓存由修改的查询 QueryEvents.before_compile() 事件,以便可能对查询应用特殊修改的编译钩子将在每次运行时生效。尤其是对于修改延迟加载和急加载(如“selectin”加载)中使用的查询的事件,这一点非常有用。为了重新启用由该事件修改的查询的缓存,将使用一个新的标志 bake_ok 已添加;请参见 使用before_compile事件 有关详细信息。

    提供一种新形式的SQL缓存的长期计划应该更全面地解决这类问题。

    References: #4947

  • [orm] [bug]

    修正了ORM错误,当关系相关的连接通过 Query.join() 或通过 joinedload() ,已生成。“本地”一方现在被排除在外。

    References: #4974

engine

  • [engine] [bug]

    修复了记录和错误报告中使用的参数repr需要额外的上下文,以便区分单个语句的参数列表和参数列表列表,因为“列表”结构还可以指示单个参数列表,其中第一个参数本身就是一个列表,例如数组参数。引擎/连接现在传入一个额外的布尔值,指示应该如何考虑参数。唯一需要数组作为参数的SQLAlchemy后端是使用pyformat参数的psycopg2的后端,因此这个问题并不太明显,但是随着使用位置的其他驱动程序获得更多的特性,支持这一点很重要。它还消除了参数repr函数根据传递的参数结构进行猜测的需要。

    References: #4902

  • [engine] [bug] [postgresql]

    固定错误 Inspector 其中,缓存密钥生成没有考虑以元组形式传递的参数,例如要为PostgreSQL方言返回的视图名称样式的元组。这将导致检查器过于笼统地缓存一组更具体的条件。逻辑已经被调整为包括缓存中的每个关键字元素,因为每个参数都应该适合缓存,否则缓存装饰器应该被方言绕过。

    References: #4955

sql

  • [sql] [usecase]

    为类型的表达式添加了新的访问器 JSON 允许特定的数据类型访问和比较,包括字符串、整数、数值、布尔元素。这修改了记录在案的在比较值时转换为字符串的方法,而是在PostgreSQL、SQlite、MySQL方言中添加特定的功能,以在所有情况下可靠地交付这些基本类型。

    References: #4276

  • [sql] [usecase]

    这个 text() construct现在支持“unique”绑定参数,这将在编译时动态地取消对自身的测试,从而允许多个 text() 要组合在一起的具有相同绑定参数名称的构造。

    References: #4933

  • [sql] [bug] [py3k]

    改变了 repr()quoted_name 构造以在Python3下使用常规字符串repr(),而不是通过“反斜杠替换”转义来运行它,这可能会产生误导。

    References: #4931

schema

  • [schema] [usecase]

    添加了对“computed columns”的DDL支持;这些是针对具有服务器计算值的列的DDL列规范,这些列在选择时(称为“virtual”)或在插入或更新时(称为“stored”)。支持Postgresql、MySQL、Oracle SQL Server和Firebird。感谢费德里科·卡塞利在这个问题上所做的大量工作。

    References: #4894

  • [schema] [bug]

    修复了列标签与纯列名重叠的错误,例如“食品标识作为foo峈id“vs.”foo.foou身份证,会过早地生成 ._label 由于使用 index=Trueunique=True 与的默认命名约定一起在列上标记 "column_0_label" . 这会导致失败 ._label 用于生成绑定参数名,特别是ORM在为UPDATE语句生成WHERE子句时使用的参数名。该问题已通过使用替代品解决 ._label 不影响的状态的DDL生成的访问器 Column . 访问器还绕过了密钥重复数据消除步骤,因为DDL不需要它,命名现在是一致的 "<tablename>_<columnname>" 在DDL中使用时没有任何后续数字符号。

    References: #4911

mysql

  • [mysql] [bug]

    添加了从基地解释的“连接被终止”消息pymysql。错误类来检测关闭的连接,基于此消息通过pymysql.InternalError()对象,该对象指示pymysql未正确处理它。

    References: #4945

mssql

  • [mssql] [bug]

    修正了MSSQL方言中的一个问题,即SELECT中基于表达式的偏移值将被拒绝,即使方言可以在面向行号的限制/偏移构造中呈现此表达式。

    References: #4973

  • [mssql] [bug]

    修复了 Engine.table_names() 方法,在该方法中,它将把方言的默认架构名称反馈到方言级别的表函数中,在SQL Server的情况下,该函数会将其解释为mssql方言所查看的点标记化的架构名称,如果数据库用户名中实际有一个点,则会导致该方法失败。在1.3中,此方法仍由 MetaData.reflect() 函数so是一个突出的码路径。在当前的主开发分支1.4中,这个问题不存在,这两个原因都是 MetaData.reflect() 未使用此方法,该方法也未显式传递默认架构名称。尽管如此,该修复程序通过将方言返回的默认服务器名值包装在引号内的方式来防止在任何情况下被解释为点标记化的名称。

    References: #4923

oracle

  • [oracle] [usecase]

    添加方言级别标志 encoding_errors 可以指定为 create_engine() . 这将被传递给python2下的SQLAlchemy的unicode解码转换器,并传递给cx_Oracle的 cursor.var() 对象作为 encodingErrors python3下的参数,对于目标数据库中存在损坏的编码这一非常不寻常的情况,除非放松错误处理,否则无法获取。该值最终是传递给的Python“encoding errors”参数之一 decode() .

    References: #4799

  • [oracle] [bug] [firebird]

    修改了Oracle和Firebird方言的“名称规范化”方法,该方法将这些方言的大写不区分大小写的约定转换为SQLAlchemy中不区分大小写的小写形式,以不自动应用 quoted_name 构造为在大写或小写转换下与自身匹配的名称,许多非欧洲字符就是这样。元数据结构中使用的所有名称都将转换为 quoted_name 对象;此处的更改只会影响某些检查函数的输出。

    References: #4931

  • [oracle] [bug]

    这个 NCHAR 数据类型现在将绑定到 cx_Oracle.FIXED_NCHAR 当在绑定参数中使用DBAPI数据绑定时,它提供了针对可变长度字符串的适当比较行为。以前 NCHAR 数据类型将绑定到 cx_oracle.NCHAR 非固定长度的;非固定长度的 CHAR 数据类型已绑定到 cx_Oracle.FIXED_CHAR 所以现在一致认为 NCHAR 绑定到 cx_Oracle.FIXED_NCHAR .

    References: #4913

firebird

  • [firebird] [bug]

    在Firebird断开连接检测中添加了额外的“断开”消息“向连接写入数据时出错”。拉请求由lukens提供。

    References: #4903

misc

  • [bug] [tests]

    修复了由于添加了null排序语法以及对聚合函数的新限制,从3.30版或更高版本更新的SQLite可能会出现的测试失败。请求请求由Nils Philippsen提供。

    References: #4920

  • [bug] [installation] [windows]

    为在Windows安装中观察到的与setuptools相关的故障添加了一个解决方法,即在未安装MSVC生成依赖项时,setuptools未正确报告生成错误,因此不允许在非C扩展生成中正常降级。

    References: #4967

1.3.10

Released: October 9, 2019

mssql

  • [mssql] [bug]

    修复了具有新的“max_identifier_length”功能的SQL Server方言中的错误,其中mssql方言已经具有此标志,并且实现无法正确适应新的初始化钩子。

    References: #4857

oracle

  • [oracle] [bug]

    修正了Oracle方言中的回归,它在oracleserver12.2及更高版本上无意中使用了128个字符的最大标识符长度,尽管1.3系列的其余部分的约定是在SQLAlchemy 1.4版本之前该值保持在30。还修复了“兼容性”版本的检索问题,并删除了当“v$parameter”视图无法访问时发出的警告,因为这会导致用户混淆。

    References: #4857, #4898

1.3.9

Released: October 4, 2019

orm

  • [orm] [bug]

    修正了selectinload loader策略中由 #4775 (在版本1.3.6中发布)加载程序将不再填充None的多对一属性。虽然这通常是不明显的,因为lazyloader在get时填充None,但如果对象被分离,则会导致分离实例错误。

    References: #4872

  • [orm] [bug]

    将纯字符串表达式传递给 Session.query() 已弃用,因为在中删除了所有字符串强制 #4481 这个应该包括在内。这个 literal_column() 函数可用于生成文本列表达式。

    References: #4873

  • [orm] [bug]

    如果出现以下情况,将发出警告: Session 可以隐式地将一个对象从标识映射中交换到另一个具有相同主键的对象,分离旧对象,这可能是在 SessionEvents.after_flush() 钩子。警告旨在通知用户某些特殊情况导致了这种情况的发生,并且前一个对象可能未处于预期状态。

    References: #4890

engine

  • [engine] [usecase]

    新增 create_engine() 参数 create_engine.max_identifier_length . 这将覆盖编码为“max identifier length”的方言,以适应最近更改了此长度的数据库,并且SQLAlchemy方言尚未调整以检测该版本。此参数与现有 create_engine.label_length 参数,它为匿名生成的标签建立最大(和默认)值。此外,在方言系统中增加了最大标识符长度的连接后检测。这个特性首先被甲骨文方言使用。

    参见

    最大标识符长度 -在Oracle方言文档中

    References: #4857

sql

  • [sql] [usecase]

    为对象传递到的情况添加了显式错误消息 Table 不是 SchemaItem 对象,而不是解析为属性错误。

    References: #4847

  • [sql] [bug]

    在绑定参数中干扰“pyformat”或“named”格式的字符,即 %, (, ) 而空格字符,以及其他一些典型的不受欢迎的字符,在 bindparam() 这是使用匿名名称,它通常是从命名列自动生成的,该列本身在其名称中包含这些字符,并且不使用 .key ,这样它们既不会干扰SQLAlchemy编译器使用字符串格式的操作,也不会干扰驱动程序级参数解析,这两种方法都可以在修复之前演示。此更改仅适用于内部生成和使用的匿名参数名,而不是最终用户定义的名称,因此更改不会对任何现有代码产生影响。尤其适用于psycopg2驱动程序,该驱动程序不会引用特殊的参数名称,但也会去掉前导下划线以适应Oracle(但还没有前导数字,因为某些anon参数目前完全基于数字/下划线);在任何情况下,Oracle都会继续引用包含特殊字符的参数名称。

    References: #4837

sqlite

  • [sqlite] [usecase]

    增加了对sqlite“URI”连接的支持,允许在查询字符串中传递sqlite特定的标志,例如支持此功能的pythonsqlite3驱动程序的“read only”。

    参见

    URI连接

    References: #4863

mssql

  • [mssql] [bug]

    当在一个名被添加到一个名为“使用多部分”的SQL语句被添加到一个SQL模式中时,使用“多部分引用”语句 Table 因为这也是反映 Inspector 方法,例如 Inspector.get_table_names() ;这适用于数据库名称中的特殊字符或空格。此外,如果当前数据库与传递的目标所有者数据库名称匹配,则不会发出“use”语句。

    References: #4883

oracle

  • [oracle] [usecase]

    如果使用Oracle 12.2或更高版本,Oracle方言现在会发出警告,并且 create_engine.max_identifier_length 未设置参数。此特定情况下的版本默认为Oracle服务器配置中设置的“兼容性”版本,而不是实际的服务器版本。在版本1.4中,12.2或更高版本的默认最大标识符长度将移动到128个字符。为了保持向前兼容性,应用程序应该设置 create_engine.max_identifier_length 为了保持相同的长度行为,或者为了测试即将到来的行为而将其设置为128。这个长度决定了生成的约束名是如何被截断的 CREATE CONSTRAINTDROP CONSTRAINT ,这意味着新长度可能会产生与使用旧长度生成的名称不匹配的名称,从而影响数据库迁移。

    参见

    最大标识符长度 -在Oracle方言文档中

    References: #4857

  • [oracle] [bug]

    恢复添加cx_甲骨文.DATETIME当SQLAlchemy调用 DateDateTimeTime 使用了数据类型,因为一些复杂的查询要求它存在。在1.2系列中由于任意原因将其删除。

    References: #4886

misc

  • [bug] [tests]

    修复了在1.3.8中发布的单元测试回归,该回归将导致Oracle、SQL Server和其他非本机枚举平台失败,因为添加了新的枚举测试作为 #4285 工作单元中的枚举可排序性;枚举创建的约束在名称上重复。

    References: #4285

1.3.8

Released: August 27, 2019

orm

  • [orm] [usecase]

    添加了对使用 Enum 使用Python pep-435枚举对象作为值作为ORM映射的主键列的数据类型。由于这些值本身不是可排序的,因此ORM对主键的要求是,一个新的 TypeEngine.sort_key_function 属性被添加到类型系统中,该系统允许任何SQL类型为其类型的Python对象实现排序,该对象由工作单元查询。这个 Enum 然后,类型使用给定枚举的数据库值定义此值。也可以通过向 Enum.sort_key_function 参数。请求请求由Nicolas Caniart提供。

    References: #4285

  • [orm] [bug]

    固定错误在哪里 Load 由于内部上下文字典中的映射器/关系状态,对象不可pickle。这些对象现在被转换为pickle,使用的技术与加载程序选项系统中长期可序列化的其他元素的技术类似。

    References: #4823

engine

  • [engine] [feature]

    添加了新参数 create_engine.hide_parameters 当设置为True时,将导致SQL参数不再被记录,也不会在 StatementError 对象。

    References: #4815

  • [engine] [bug]

    修正了这样一个问题,即如果第一次连接时发生的方言“初始化”过程遇到意外异常,则初始化过程将无法完成,然后不再尝试后续的连接尝试,从而使方言处于未初始化或部分初始化状态,在需要根据带电连接检查确定的参数范围内。事件系统中的“invoke once”逻辑已经过重新处理,以适应这种情况,使用新的私有API特性建立一个“exec once”钩子,该钩子将继续允许初始值设定项在后续连接上触发,直到它完成而不引发异常。这不会影响现有的 once=True 事件系统中的标志。

    References: #4807

postgresql

  • [postgresql] [usecase]

    增加了对包含特殊PostgreSQL限定符“NOT VALID”的检查约束的反射的支持,对于添加到现有表中的检查约束,可以使用该限定符表示这些约束不应用于表中的现有数据。返回的检查约束的PostgreSQL字典 Inspector.get_check_constraints() 可能包括附加条目 dialect_options 其中包含一个条目 "not_valid": True 如果检测到这个符号。请求请求由Bill Finn提供。

    References: #4824

  • [postgresql] [bug]

    修改了在1.3.7中添加的对psycopg2“executeu values()”特性支持的方法 #4623 . 该方法依赖于一个正则表达式,该表达式无法匹配更复杂的INSERT语句,例如涉及子查询的INSERT语句。新方法与VALUES子句呈现的字符串完全匹配。

    References: #4623

  • [postgresql] [bug]

    修复了Postgresql运算符,如 Comparator.contains()Comparator.contained_by() 如果对非整数值使用 array 对象,因为错误的assert语句。

    References: #4822

sqlite

  • [sqlite] [bug] [reflection]

    修正了这样一个错误:如果外键被设置为只通过表名而不使用列名来引用父表,那么在设置“被引用的列”时,不会正确反映该外键,因为如果没有显式给出这些列,SQLite的PRAGMA不会报告这些列。出于某些原因,这是硬编码的,以假定本地列的名称,这可能适用于某些情况,但不正确。如果远程列不直接出现在反射的杂注中,新方法将反映被引用表的主键,并使用约束列列表作为引用列列表。

    References: #4810

1.3.7

Released: August 14, 2019

orm

  • [orm] [bug]

    修复了多对一逻辑的new selectinload导致的回归,其中primaryjoin条件不基于实际外键,如果父对象上的给定键值不存在相关对象,则会导致keyrerror。

    References: #4777

  • [orm] [bug]

    修复了使用中的错误 Query.first() 或者切片表达式与应用了基于表达式的“偏移量”的查询结合将引发TypeError,这是因为“偏移量”的“或”条件不希望它是SQL表达式而不是整数或无。

    References: #4803

sql

  • [sql] [bug]

    固定问题,其中 Index 对象包含不能解析为特定列的函数表达式的混合,以及基于字符串的列名,则无法正确初始化其内部状态,从而导致在DDL编译过程中失败。

    References: #4778

  • [sql] [bug]

    固定错误在哪里 TypeEngine.column_expression() 方法不会应用于UNION或其他内部的后续SELECT语句 _selectable.CompoundSelect ,即使SELECT语句在语句的最高层呈现。在第一列中,只需要为第一行返回SELECT类型,而第一行是需要的。

    References: #4787

  • [sql] [bug]

    修复了SELECT结构的内部克隆可能导致键错误的问题,如果SELECT的副本更改了其状态,从而导致其列列表发生更改。这被观察到在一些ORM场景中发生,这些场景可能是1.3及更高版本所特有的,因此部分是回归修复。

    References: #4780

postgresql

  • [postgresql] [usecase]

    为psycopg2方言添加了新的方言标志, executemany_mode 取代了之前的实验 use_batch_mode 旗帜。 executemany_mode 支持psycopg2提供的“执行批处理”和“执行值”函数,后者用于编译 insert() 构造。请求请求由Yuval Dinari提供。

    References: #4623

mysql

  • [mysql] [usecase]

    将保留字数组和成员添加到MySQL保留字列表中,因为MySQL 8.0现在已经将它们设为保留字。

    References: #4783

  • [mysql] [bug]

    当将字符集提供给MySQL驱动程序时,MySQL方言将在连接开始时发出“集合名称”,以平息在MySQL 8.0中观察到的一个明显行为,该行为在UNION包括与CAST(NULL AS CHAR(..))形式的列联合的字符串列时会引发排序错误,这就是SQLAlChemy的PONTIMIC_UNION函数所做的事情。这个问题似乎已经影响PyMySQL至少一年了,但是根据此DBAPI创建连接方式的变化,最近出现在mysqlclient 1.4.4版本中。由于此指令的存在会影响三个独立的MySQL字符集设置,每个设置都会根据它们的存在产生复杂的影响,因此SQLAlChemy现在将在新连接上发出该指令,以确保正确的行为。

    References: #4804

  • [mysql] [bug]

    为上游MySQL 8问题添加了另一个修复程序,该问题在外键约束反射中错误地报告了区分大小写的表名,这是第一次添加的修复程序的扩展 #4344 它会影响区分大小写的列名。新问题发生在MySQL 8.0.17中,因此88718修复的一般逻辑保持不变。

    References: #4751

sqlite

  • [sqlite] [bug]

    支持json的方言应该接受参数 json_serializerjson_deserializer 但是在create_engine()级别,SQLite方言调用它们 _json_serializer_json_deserilalizer . 名称已更正,旧名称将被接受并带有更改警告,这些参数现在记录为 create_engine.json_serializercreate_engine.json_deserializer .

    References: #4798

  • [sqlite] [bug]

    修复了一个错误,即在SQLite方言中使用“PRAGMA table_info”意味着检测表是否存在的反射功能、表列列表和外键列表将默认为任何附加数据库中的任何表,如果没有给定模式名,并且表不存在于基架构中。修复程序显式地为“main”架构运行PRAGMA,如果“main”没有返回行,则运行“temp”架构,以维护“no schema”命名空间中表+临时表的行为,只在“schema”命名空间中附加表。

    References: #4793

mssql

  • [mssql] [usecase]

    新增 try_cast() 为SQL Server构造,它发出“TRY-tu-CAST”语法。请求请求由Leonel Atencio提供。

    References: #4782

misc

  • [bug] [events]

    修正了事件系统中使用 once=True 如果这些侦听器函数在使用后被垃圾回收,则带有动态生成的侦听器函数的标志将导致将来事件的事件注册失败,这是因为假定侦听函数被强引用。包装好的“once”现在被修改为持久地强引用内部函数,并且更新了文档,说明使用“once”并不意味着侦听器函数的自动取消注册。

    References: #4794

1.3.6

Released: July 21, 2019

orm

  • [orm] [feature]

    添加了新的加载程序选项方法 Load.options() 它允许按层次结构构造加载器选项,以便可以将许多子选项应用到特定路径而无需调用 defaultload() 很多次。多亏了阿莱西奥·博贡的主意。

    References: #4736

  • [orm] [performance]

    优化在selectin加载中的应用 #4340 在不需要联接来急切地加载相关项的情况下,现在也将应用于多对一关系,因此仅查询相关表以获取简单的联接条件。在这种情况下,将根据父对象上的外键列的值查询相关项;如果这些列被延迟或未加载到集合中的任何父对象上,则加载程序将返回到JOIN方法。

    References: #4775

  • [orm] [bug]

    固定回归 #4365 在这种情况下,不使用别名从实体到自身的联接不再引发信息性错误消息,而是在断言上失败。信息性错误条件已恢复。

    References: #4773

  • [orm] [bug]

    修复了一个问题,其中 _ORMJoin.join() 方法,该方法不是内部使用的ORM级别方法,它公开了通常是 Query.join() ,没有传播 fullouterjoin 关键字参数正确。拉请求礼貌丹尼斯卡塔耶夫。

    References: #4713

  • [orm] [bug]

    修正了多对一关系 uselist=True 在需要更改相关列的主键更改期间,将无法正确更新。

    References: #4772

  • [orm] [bug]

    修复了一个错误,即检测多对一或一对一使用“动态”关系(这是一个无效配置)时,如果将关系配置为 uselist=True . 目前的修复方法是警告,而不是加薪,否则这将是向后不兼容的,但是在将来的版本中,它将是一个加薪。

    References: #4772

  • [orm] [bug]

    修正了一个错误,即针对还不存在的映射属性创建的同义词,例如在配置映射器之前引用backref时,当试图测试最终不存在的属性时,会引发递归错误(当类通过Sphinx autodoc运行时会发生这种情况),因为同义词的未配置状态会将其放入属性not found循环中。

    References: #4767

engine

  • [engine] [bug]

    修复了使用反射函数的错误,例如 MetaData.reflect() 用一个 Engine 应用了执行选项的对象将失败,因为 OptionEngine 代理对象未能包括 .engine 在反射例程中使用的属性。

    References: #4754

sql

  • [sql] [bug]

    已为调整初始化 Enum 最小化它调用 .__members__ 给定PEP-435枚举对象的属性,以适应此属性调用成本高昂的情况,某些流行的第三方枚举库也是如此。

    References: #4758

  • [sql] [bug] [postgresql]

    固定问题 array_agg 结合 FunctionElement.filter() 不会与数组索引运算符组合生成正确的运算符优先级。

    References: #4760

  • [sql] [bug]

    修正了一个不太可能出现的问题,即工会和其他组织的“对应列”例行程序 _selectable.CompoundSelect 在某些列重叠的情况下,对象可能返回错误的列,因此在使用set操作时,如果底层 select() 由于缓存值未被清除,构造以前用于其他类似类型的例程中。

    References: #4747

postgresql

  • [postgresql] [usecase]

    增加了对PostgreSQL分区表上的索引反射的支持,从版本11开始就添加到了PostgreSQL中。

    References: #4771

  • [postgresql] [usecase]

    通过嵌套 array 对象在另一个对象中。将自动检测多维数组类型。

    参见

    array

    References: #4756

mysql

  • [mysql] [bug]

    修复了特殊逻辑为 TIMESTAMP 数据类型 nullable=True 如果列的数据类型为 TypeDecorator 或A Variant .逻辑现在确保它可以展开到原始的 TIMESTAMP 以便在请求时正确呈现此特殊情况的空关键字。

    References: #4743

  • [mysql] [bug]

    增强的MySQL/MariaDB版本字符串解析,以适应外来的MariaDB版本字符串,其中“MariaDB”单词嵌入到其他字母数字字符中,例如“MariaDBV1”。为了正确地适应MySQL和MariaDB之间分离的API特性(例如“transaction_isolation”系统变量),此检测非常关键。

    References: #4624

sqlite

  • [sqlite] [usecase]

    通过呈现此后端的VALUES关键字,在使用SQLite的运算符中添加了对复合(元组)的支持。由于已知其他后端(如DB2)使用相同的语法,因此在基本编译器中使用方言级别的标志启用该语法 tuple_in_values . 这一更改还包括在元组值和空集之间使用“IN峎()”时对SQLite的“空元组中的空”表达式的支持。

    References: #4766

mssql

  • [mssql] [bug]

    确保用于反映索引和视图定义的查询将显式地将字符串参数强制转换为nvarchar,因为许多SQL Server驱动程序经常将字符串值(尤其是那些具有非ASCII字符或更大字符串值的值)视为通常无法正确比较ag的文本。出于某种原因,SQL Server的信息架构表中存在ainst varchar字符。对于针对SQL Server的反射查询,已经执行了这些强制转换操作。 information_schema. 表,但在其他三个查询中缺少 sys. 桌子。

    References: #4745

1.3.5

Released: June 17, 2019

orm

  • [orm] [bug]

    修复了一系列与两级以上的联接表继承相关的错误,以及对主键值的修改,其中这些主键列也以外键关系链接在一起,这是联接表继承的典型做法。三级继承层次结构中的中间表现在将得到更新,前提是只有主键值已更改且被动的“更新”为“假”(例如外键约束未被强制执行),而在此之前,它将被跳过;同样,如果被动的“更新”更新为真(例如,在“更新级联”生效时),第三级表将不会像前面那样接收UPDATE语句,因为CASCADE已经修改了它,所以它将失败。在相关的问题中,当修改父对象的主键时,链接到联接继承层次结构的中间表的主键上的三级继承层次结构的关系也将正确地更新其外键列,即使该父对象是链接父类的子类,而之前这些班级不算在内。

    References: #4723

  • [orm] [bug]

    修正了错误 Mapper.all_orm_descriptors 访问器将返回 Mapper 在声明性的下面 __mapper___ 键,当它不是描述符时。这个 .is_attribute 所有人的旗帜 InspectionAttr 现在查询对象,该对象也被修改为 True 对于关联代理,因为对于此对象,它被错误地设置为false。

    References: #4729

  • [orm] [bug]

    固定回归 Query.join() 何处 aliased=True 如果以前对同一实体进行了联接,则标志将不会正确地将子句适应应用于筛选条件。这是因为适配器的排列顺序错误。顺序已颠倒,因此最近的适配器 aliased=True 调用优先于1.2及更早版本中的情况。这打破了“元素树”的例子。

    References: #4704

  • [orm] [bug] [py3k]

    替换了的Python兼容性例程 getfullargspec() 从python 3.3中得到了一个完全自动的版本。最初,python在python 3.8alphas中对此函数发出了拒绝警告。当这个更改被恢复时,我们观察到 getfullargspec() 是不是比3.4系列慢了一个数量级? Signature .虽然python计划在这种情况下进行改进,但sqlacalchemy项目目前正在使用一个简单的替换来避免将来出现任何问题。

    References: #4674

  • [orm] [bug]

    改写了属性机制 AliasedClass 不再依靠召唤 __getattribute__ 在包装类的mro上,使用getattr()解析包装类上的属性,然后展开/调整该属性。这允许在映射类上使用更大范围的属性样式,包括 __getattr__() 但是它也使代码更简单,更具弹性。

    References: #4694

sql

  • [sql] [bug]

    修正了一系列引用问题,这些问题都源于 literal_column() 构造,当通过与文本匹配的标签引用的子查询“代理”时,标签将不会应用引用规则,即使 Label 被设定为 quoted_name 构造。不将引用应用于 Label 是一个bug,因为此文本严格来说是一个SQL标识符名称,而不是一个SQL表达式,而且字符串中不应该嵌入引号,这与 literal_column() 可能适用于。非标记的现有行为 literal_column() 虽然在任何情况下都不清楚是否可以为这样的构造生成有效的SQL,但是为了帮助手动引用方案,在子查询外部保持原样的传播方式是可以维护的。

    References: #4730

postgresql

  • [postgresql] [usecase]

    在反映PostgreSQL的索引(包括asc、desc、nullsfirst、nullslast)时,添加了对列排序标志的支持。此外,还将此功能添加到反射系统中,该系统在将来的版本中可应用于其他方言。拉请求由Eli Collins提供。

    References: #4717

  • [postgresql] [bug]

    修复了PostgreSQL方言无法正确反映没有成员的枚举数据类型的错误,返回的列表 None 对于 get_enums() 当反射具有此类数据类型的列时,调用并引发类型错误。检查现在返回一个空列表。

    References: #4701

mysql

1.3.4

Released: May 27, 2019

orm

  • [orm] [bug]

    固定问题 AttributeEvents.active_history 对于通过 AttributeEvents.propagate 标志。此错误已存在于 AttributeEvents 系统。

    References: #4695

  • [orm] [bug]

    修正了新的关联代理系统在使用混合属性时仍然不代理混合属性的回归。 @hybrid_property.expression decorator返回备用SQL表达式,或者当混合返回任意 PropComparator ,在表达式级别。这涉及到进一步推广用于检测在 QueryableAttribute ,以便更好地检测描述符是否最终服务于映射类或列表达式。

    References: #4690

  • [orm] [bug]

    针对声明性类映射过程应用了映射器“configure mutex”,以防止在动态模块导入方案仍在为相关类配置映射器的过程中使用映射器时可能发生的争用。这并不能防范所有可能的争用条件,例如,到目前为止,并发导入还没有遇到依赖类,但是它会尽可能防范SQLAlchemy声明性进程中的依赖类。

    References: #4686

  • [orm] [bug]

    如果一个临时对象正在与以下对象合并到会话中,则会发出警告: Session.merge() 当该对象在 Session .如果对象通常是双插入的,则会发出警告。

    References: #4647

  • [orm] [bug]

    新关系M2O比较逻辑中的固定回归 多对一查询表达式行为的改进 与持久化为空且在映射实例中处于未提取状态的属性进行比较时。由于该属性没有显式默认值,因此在持久性设置中访问时需要将其默认为空。

    References: #4676

engine

  • [engine] [bug] [postgresql]

    移动了方言初始化过程中发生的“回滚”,使其发生在其他特定于方言的初始化步骤之后,特别是psycopg2方言的初始化步骤,这些步骤无意中会在第一个新连接上留下事务状态,这可能会干扰某些psycopg2。-需要不启动事务的特定API。请马修·威尔克斯提出请求。

    References: #4663

sql

  • [sql] [bug]

    修正了 GenericFunction 类无意中将自己注册为一个命名函数。拉请求由阿德里安·贝切特提供。

    References: #4653

  • [sql] [bug]

    修正了布尔列的双重否定不会重置“not”运算符的问题。

    References: #4618

  • [sql] [bug]

    这个 GenericFunction 正在迁移命名空间,以便以不区分大小写的方式查找函数名,因为SQL函数不会在区分大小写的差异上发生冲突,也不会在用户定义的函数或存储过程中发生这种情况。查找用声明的函数 GenericFunction 现在使用不区分大小写的方案,但是支持一个允许两个或更多 GenericFunction 存在具有不同事例的相同名称的对象,这将导致对该特定名称进行区分大小写的查找,同时在函数注册时发出警告。感谢AdrienBerchet为这个复杂的特性做了大量的工作。

    References: #4569

postgresql

  • [postgresql] [bug] [orm]

    修正了一个问题,即即使报告的方言“支持多行数=假”,也会发出“匹配行数”警告,就像psycogp2的情况一样, use_batch_mode=True 以及其他。

    References: #4661

mysql

  • [mysql] [bug]

    增加了对drop-check约束的支持,mysql 8.0.16需要它来删除check约束;mariadb支持plain drop约束。逻辑通过检查服务器版本字符串是否存在Mariadb来区分这两种语法。alembic迁移已经解决了这个问题,通过实现自己的drop for mysql/mariadb检查约束,但是这个更改直接在核心中实现了它,因此它可以用于一般用途。拉车请求由汉内斯·汉森提供。

    References: #4650

mssql

  • [mssql] [feature]

    添加了对SQL Server筛选索引的支持,方法是 mssql_where 类似于 postgresql_where PostgreSQL方言中的索引函数。

    参见

    筛选索引

    References: #4657

  • [mssql] [bug]

    在pymsql的“is_disconnect”中添加了错误代码20047。请示乔恩·舒夫。

    References: #4680

misc

  • [misc] [bug]

    从manifest.in中删除了错误的“sqla_nose.py”符号,在该符号中创建了不需要的警告消息。

    References: #4625

1.3.3

Released: April 15, 2019

orm

  • [orm] [bug]

    修正了在新的“模棱两可的froms”查询逻辑中引入的1.3回归 join()在更明确地确定“左”端时处理模糊性 在哪里 Query 在FROM子句中显式地将实体 Query.select_from() 并使用 Query.join() 如果在附加联接中使用该实体,则稍后将导致“模棱两可的自”错误,因为该实体在 Query . 修复程序通过将独立实体折叠到已经是其一部分的联接中来解决这种不确定性,其方式与呈现select语句时最终发生的方式相同。

    References: #4584

  • [orm] [bug]

    调整了 Query.filter_by() 不调用的方法 and() 内部违反多个标准,而不是将其传递给 Query.filter() 作为一系列标准,而不是单个标准。这允许 Query.filter_by() 推迟到 Query.filter() 对子句的可变数目的处理,包括列表为空的情况。在这种情况下, Query 对象将没有 .whereclause ,它允许后面的“no whereclause”方法,如 Query.select_from() 始终如一地行动。

    References: #4606

postgresql

  • [postgresql] [bug]

    修正了由于 #4562 其中,仅包含查询字符串而不包含主机名的URL(例如为了使用连接信息指定服务文件)将不再正确传播到psycopg2。变化 #4562 已经调整以进一步满足psycopg2的确切要求,即如果有任何连接参数,则不再需要“dsn”参数,因此在这种情况下,查询字符串参数是单独传递的。

    References: #4601

mssql

  • [mssql] [bug]

    修复了SQL Server方言中的问题,即如果绑定参数以ORDER BY表达式的形式存在,而该表达式最终不会在SQL Server版本的语句中呈现,则这些参数仍将是执行参数的一部分,从而导致DBAPI级错误。由Matt Lewellyn提出请求。

    References: #4587

misc

  • [bug] [pool]

    固定的行为回归是由于对 Pool 那里 SingletonThreadPool 不再使用此选项,它会导致“返回时回滚”逻辑在相同的情况下发生 Engine 在事务上下文中多次用于连接或隐式执行,从而取消事务。虽然这不是推荐的使用引擎和连接的方法,但是在使用时,这是一个令人困惑的行为变化。 SingletonThreadPool ,无论在同一线程中使用同一引擎执行了什么操作,事务都应保持打开状态。这个 use_threadlocal 标志仍被弃用,但是 SingletonThreadPool 现在实现了它自己的相同逻辑版本。

    References: #4585

  • [bug] [ext]

    修复了使用中的错误 copy.copy()copy.deepcopy()MutableList 由于python pickle和copy在如何利用 __getstate__()__setstate__() 关于列表。为了解决这个问题, __reduce_ex__ 方法必须添加到 MutableList .为了保持与现有pickle的向后兼容性,基于 __getstate__() , the __setstate__() 方法也保持不变;测试套件断言针对类的旧版本生成的pickle仍然可以由pickle模块反序列化。

    References: #4603

1.3.2

Released: April 2, 2019

orm

  • [orm] [bug] [ext]

    恢复了对纯python描述符的实例级支持,例如 @property 对象,与关联代理一起,如果被代理的对象根本不在ORM范围内,它将被分类为“不明确”,但直接被代理。对于类级访问,一个基本类级``uuuu get_uuuu()``现在返回 AmbiguousAssociationProxyInstance 直接,而不是引发异常,这是与返回 AssociationProxy 这是可能的。还改进了这些对象的字符串化,使其更能描述当前状态。

    References: #4573, #4574

  • [orm] [bug]

    修复了使用 with_polymorphic() 或者,当别名目标用作 Select.correlate_except()column_property() . 这需要对子句自适应机制进行修复,以正确处理出现在“相关项除外”列表中的可选项,处理方式与出现在“相关项”列表中的可选择项类似。这最终是一个相当基本的bug,持续了很长时间,但很难发现它。

    References: #4537

  • [orm] [bug]

    修正了在不使用的情况下,试图将关系选项链接到别名类时应该引发的新错误消息的回归。 PropComparator.of_type() 而是提高 AttributeError . 注意,在1.3中,创建从普通映射器关系到 AliasedClass 不使用 PropComparator.of_type() .

    References: #4566

sql

postgresql

  • [postgresql] [feature]

    增加了对psycopg2方言无参数连接URL的支持,这意味着可以将URL传递给 create_engine() 作为 "postgresql+psycopg2://" 没有其他参数来指示传递给libpq的空DSN,它指示连接到“localhost”,而不提供用户名、密码或数据库。拉请求由朱利安·梅恩提供。

    References: #4562

  • [postgresql] [bug]

    修改了 Select.with_for_update.of 参数,以便在传递联接或其他组合可选项时, Table 对象将从中筛选出来,允许将join()对象传递给参数,就像在将联接表继承与ORM一起使用时通常会发生的情况一样。拉车请求由Raymond Lu提供。

    References: #4550

1.3.1

Released: March 9, 2019

orm

  • [orm] [bug] [ext]

    修正了关联代理链接到同义词的回归在实例级和类级都不再有效。

    References: #4522

mssql

  • [mssql] [bug]

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

    This change is also backported to: 1.2.19

    References: #4536

  • [mssql] [bug]

    由于 #4393 其中开口端的拆除 **kwFloat 由于传递了“scale”参数,数据类型导致此类型的反射失败。

    References: #4525

1.3.0

Released: March 4, 2019

orm

  • [orm] [feature]

    这个 Query.get() 方法现在可以接受属性键和值的字典,作为指示要加载的主键值的方法;对于组合主键特别有用。拉车请求由Sanjana S.提供。

    References: #4316

  • [orm] [feature]

    现在可以按照与普通属性相同的方式将SQL表达式分配给ORM刷新的主键属性,如中所述 将SQL插入/更新表达式嵌入到刷新中 其中表达式将使用RETURNING进行求值,然后返回到ORM;如果是pysqlite,则使用cursor.lastrowid属性工作。需要支持返回的数据库(例如PostgreSQL、Oracle、SQL Server)或pysqlite。

    References: #3133

engine

  • [engine] [feature]

    修改了格式 StatementError 当变细。每个错误细节在多个新行上被分解,而不是在一行上被分隔开。此外,SQL表示现在将对SQL语句进行字符串化,而不是使用 repr() ,使换行符按原样呈现。内特·克拉克的请求。

    References: #4500

sql

  • [sql] [bug]

    这个 Alias 类和相关子类 CTELateralTableSample 已被改写,因此用户无法直接构造对象。这些构造要求使用独立构造函数或可选绑定方法来实例化新对象。

    References: #4509

schema

  • [schema] [feature]

    添加了新参数 Table.resolve_fksMetaData.reflect.resolve_fks 当设置为false时,将禁用在 ForeignKey 对象,这既可以减少省略表的SQL开销,也可以避免由于特定于数据库的原因而无法反映的表。二 Table 相同的对象 MetaData 即使两个表的反射是单独发生的,集合仍然可以彼此引用。

    References: #4517

1.3.0b3

Released: February 8, 2019

orm

  • [orm] [bug]

    改善的行为 with_polymorphic() 与加载程序选项结合使用,尤其是通配符操作以及 load_only() . 多态对象的目标将更准确,这样实体上的列级选项将正确生效。 #4468 .

    References: #4469

orm declarative

  • [orm] [declarative] [bug]

    添加了一些在基于 AbstractConcreteBaseDeferredReflectionAutoMap 在映射准备好使用之前使用,该映射包含类的描述性信息,而不是陷入信息较少的其他故障模式。

    References: #4470

sql

  • [sql] [bug]

    完全删除了作为 select()Query 被强制到的对象 text() 自动构造;发出的警告现在是argumenterror,或者在order_by()/group_by()的情况下是compilerError。从1.0版开始,这就发出了一个警告,但是它的存在仍然会引起对这种行为可能被误用的关注。

    请注意,已为order_by()/group_by()发布了公共CVE,该提交解决了该问题:CVE-2019-7164 CVE-2019-7548

    References: #4481

  • [sql] [bug]

    报价适用于 Function 名称,通常但不一定由 sqlalchemy.sql.expression.func 在编译时构造,如果它们包含非法字符,例如空格或标点符号。但是,这些名称和以前一样被视为不区分大小写,这意味着如果名称包含大写或混合大小写字符,那么仅此一项不会触发引用。目前,为了向后兼容,保持大小写不敏感。

    References: #4467

  • [sql] [bug]

    在接受为纯字符串的关键DDL短语中添加了“SQL短语验证”,包括 ForeignKeyConstraint.on_deleteForeignKeyConstraint.on_updateExcludeConstraint.usingForeignKeyConstraint.initially ,对于只需要一系列SQL关键字的区域。任何建议需要引用该短语的非空格字符都将引发 CompileError . 此更改与作为 #4481 .

    References: #4481

postgresql

  • [postgresql] [bug]

    修正了在索引类型(如gist、btree等)或exclude约束中使用大写名称将其视为要引用的标识符,而不是将其呈现为原样的问题。新的行为将这些类型转换为小写,并确保它们只包含有效的SQL字符。

    References: #4473

misc

  • [change] [tests]

    测试系统已经移除了对鼻子的支持,这是几年来未维护的,并且在python 3下产生了警告。测试套件目前在pytest上是标准化的。拉式请求,由Parth Shandilya提供。

    References: #4460

  • [bug] [ext]

    在将关联代理与集合或字典一起使用时,实现了更全面的分配操作(例如“批量替换”)。修复了创建冗余代理对象以替换旧代理对象的问题,这会导致过多的事件和SQL,并且在唯一约束的情况下,会导致刷新失败。

    References: #2642

1.3.0b2

Released: January 25, 2019

general

  • [general] [change]

    整个库中的一个巨大变化确保所有被标记为已弃用或遗留的对象、参数和行为现在都发出 DeprecationWarning 调用时出现警告。由于python 3解释器现在默认为显示拒绝警告,以及基于tox和pytest等工具的现代测试套件倾向于显示拒绝警告,因此此更改应使您更容易注意哪些API功能已过时。这一变化的一个主要理由是,尽管如此仍能看到现实世界使用的长期不受欢迎的功能最终可以在不久的将来被删除;其中最大的例子是 SessionExtensionMapperExtension 类以及一些其他事件前扩展挂钩,这些挂钩自0.7版以来已被弃用,但仍保留在库中。另一个问题是,一些主要的长期行为也将被弃用,包括线程本地引擎策略、convert_unicode标志和非主映射器。

    References: #4393

orm

  • [orm] [feature]

    实现了一个新功能 AliasedClass 构造现在可以用作 relationship() . 这使得“非主映射器”的概念不再是必要的,因为 AliasedClass 更容易配置和自动继承映射类的所有关系,并保留加载程序选项正常工作的能力。

    References: #4423

  • [orm] [feature]

    新增 MapperEvents.before_mapper_configured() 事件。此事件用每个映射器事件补充其他“配置”阶段映射器事件,每个映射器事件接收 Mapper 在其配置步骤之前,还可以用来防止或延迟特定 Mapper 使用新返回值的对象 interfaces.EXT_SKIP . 有关示例,请参见文档链接。

    References: #4397

  • [orm] [change]

    添加了一个新函数 close_all_sessions() 它接管了 Session.close_all() 方法,现在已弃用,因为它会混淆为类方法。拉请求由奥古斯汀·特兰卡特提供。

    References: #4412

  • [orm] [bug]

    修复了一个长期存在的问题,即在删除某个重复的集合成员时,重复的集合成员将导致backref删除该成员与其父对象之间的关联,这是在一条语句中交换两个对象的副作用。

    References: #1103

  • [orm] [bug]

    扩展了作为 #3287 ,其中对使用通配符的子类所做的加载程序选项将自身扩展到包括将通配符应用到父类上的属性,以及“绑定”加载程序选项,例如在类似表达式中 Load(SomeSubClass).load_only('foo') . 属于的父类的列 SomeSubClass 也将以同样的方式排除,如同未绑定选项 load_only('foo') 使用。

    References: #4373

  • [orm] [bug]

    改进了ORM在加载程序选项遍历区域中发出的错误消息。这包括早期发现不匹配的加载程序策略,以及更清楚地解释为什么这些策略不匹配。

    References: #4433

  • [orm] [bug]

    集合的“移除”事件现在在移除项之前调用,如果 collection.remove() 方法,与大多数其他形式的集合项移除(例如 __delitem__ ,更换 __setitem__ )为了 pop() 方法,移除事件在操作后仍将激发。

  • [orm] [bug] [engine]

    为核心和ORM的执行选项添加了访问器,通过 Query.get_execution_options()Connection.get_execution_options()Engine.get_execution_options()Executable.get_execution_options() . 公关人员:Daniel Lister。

    References: #4464

  • [orm] [bug]

    由于以下原因,关联代理中的固定问题 #3423 这导致了习俗的使用 PropComparator 具有混合属性的对象,例如 dictlike-polymorphic 在关联代理中不起作用的示例。增加的严格性 #3423 已经放宽了,并添加了附加逻辑,以适应链接到自定义混合体的关联代理。

    References: #4446

  • [orm] [bug]

    实现了 .get_history() 方法,也意味着 AttributeState.history ,为了 synonym() 属性。以前,尝试通过同义词访问属性历史记录会引发 AttributeError .

    References: #3777

orm declarative

  • [bug] [orm declarative]

    增加了一个 __clause_element__() 方法到 ColumnProperty 它允许在声明性映射类中使用未完全声明的列或延迟属性,当在类声明中的约束或其他面向列的方案中使用时,稍微友好一些,尽管这在开放式表达式中仍然不起作用;更喜欢调用 ColumnProperty.expression 接收时的属性 TypeError .

    References: #4372

engine

  • [engine] [feature]

    添加了公共访问器 QueuePool.timeout() 返回 QueuePool 对象。拉式请求,由Irina Delamare提供。

    References: #3689

  • [engine] [change]

    “threadlocal”引擎策略自大约0.2版本以来一直是sqlacalchemy的一个遗留功能,现在已被弃用,连同 Pool.threadlocal 参数 Pool 在大多数现代用例中都没有效果。

    References: #4393

sql

  • [sql] [feature]

    修正了 AnsiFunction 类,普通SQL函数的基础,如 CURRENT_TIMESTAMP ,接受位置参数,如常规特殊函数。为了适应这种情况,在特定后端的许多函数接受诸如“小数秒”精度之类的参数。如果函数是用参数创建的,它将呈现圆括号和参数。如果没有参数存在,编译器将生成非括号形式。

    References: #4386

  • [sql] [change]

    这个 create_engine.convert_unicodeString.convert_unicode 参数已被弃用。这些参数是在大多数python dbapis几乎不支持python unicode对象时构建的,而sqlAlchemy需要承担非常复杂的任务,即以一种执行方式在整个系统中的unicode和bytestrings之间对数据和SQL字符串进行编组。多亏了python 3,dbapis不得不适应Unicode感知的API,而现在所有由sqlacalchemy支持的dbapi都支持Unicode,包括python 2,这使得这个长期存在且非常复杂的特性最终(大部分)被删除。当然,还有一些python 2边缘案例中,sqlacalchemy必须处理unicode,但是这些都是自动处理的;在现代使用中,不需要最终用户与这些标志进行交互。

    References: #4393

mssql

  • [mssql] [bug]

    这个 literal_processor 对于 UnicodeUnicodeText 数据类型现在呈现 N SQL Server对SQL表达式中呈现的Unicode字符串值所要求的文本字符串表达式前面的字符。

    References: #4442

misc

  • [bug] [ext]

    修正了1.3.0b1中由 #3423 如果访问只存在于多态子类上的属性的关联代理对象将引发 AttributeError 即使被访问的实际实例是该子类的实例。

    References: #4401

1.3.0b1

Released: November 16, 2018

orm

  • [orm] [feature]

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

    This change is also backported to: 1.2.5

  • [orm] [feature]

    增加新标志 Session.bulk_save_objects.preserve_orderSession.bulk_save_objects() 方法,默认为true。当设置为false时,给定的映射将按每个对象类型分组为插入和更新,以允许更多机会一起批处理公共操作。拉车请求,由亚历山德罗·库奇提供。

  • [orm] [feature]

    “selectin”加载程序策略现在在简单的一对多加载的情况下省略了join,在这种情况下它只依赖相关表中的加载,而依赖相关表的外键列来匹配父表中的主键。可以通过设置 relationship.omit_join 标记为false。非常感谢杰森·里斯在这方面所做的努力。

    References: #4340

  • [orm] [feature]

    补充 .info 字典到 InstanceState 类,来自调用的对象 inspect() 在映射的对象上。

    References: #4257

  • [orm] [bug]

    修复了使用 LateralQuery.join() 以及 Query.select_entity_from() 不会将子句自适应应用于联接的右侧。”横向”介绍了连接右侧的可关联用例。在此之前,不考虑对该条款的修改。注意,仅在1.2中,由 Query.subquery() 由于 #4304 ;可选的需要由 select() 功能是“横向”连接的右侧。

    This change is also backported to: 1.2.12

    References: #4334

  • [orm] [bug]

    修正了被动删除“all”的问题,即即使从父集合中删除了某个对象后,该对象的外键属性仍保持其值。以前,工作单元会将其设置为空,即使被动删除指示不应修改它。

    References: #3844

  • [orm] [bug]

    改进了将多对一对象表达式绑定在一起的关系的行为,这样,对相关对象上的列值的检索现在可以针对从其父对象分离的对象进行恢复。 Session ,即使属性已过期。中的新功能 InstanceState 用于在某个特定列属性的最后一个已知值过期之前对其进行memoize,以便表达式仍然可以在对象同时分离和过期时对其进行计算。使用现代属性状态特性,还可以根据需要改进错误条件,以生成更具体的消息。

    References: #4359

  • [orm] [bug] [mysql] [postgresql]

    ORM现在将子查询中的“for update”子句加倍,该子句在某些情况下与joined eager loading一起呈现,正如我们观察到的那样,MySQL不会锁定子查询中的行。这意味着查询使用两个for update子句呈现;请注意,在某些后端(如Oracle)上,子查询的for update子句被静默忽略,因为它们是不必要的。此外,对于主要与PostgreSQL一起使用的“of”子句,仅当使用for update时,才会在内部子查询上呈现for update,以便可选择项可以针对select语句中的表。

    References: #4246

  • [orm] [bug]

    重构的 Query.join() 进一步阐明构造连接的各个组件。此重构添加了 Query.join() 当FROM列表中有多个元素或查询针对多个实体时,确定联接最合适的“左侧”。如果有多个from/entity匹配,则会引发一个错误,要求指定on子句来解决歧义。尤其是我们看到的回归 #4363 但也有普遍的用途。代码路径 Query.join() 现在更容易跟踪,并且错误情况在操作的早期更具体地确定。

    References: #4365

  • [orm] [bug]

    解决了长期存在的问题 Query 其中一个标量子查询,如 Query.exists()Query.as_scalar() 以及其他来源 Query.statement 当用于新的 Query 这需要实体适应,例如当查询被转换为联合时,或者从_Self()中转换为a时,更改会从 select() 对象由 Query.statement 访问器。

    References: #4304

  • [orm] [bug]

    当在python 3下的ORM刷新期间,主键值在python中不可排序时,会重新引发一个信息性异常,例如 Enum 那没有 __lt__() 方法;通常python 3会引发 TypeError 在这种情况下。刷新过程按python中的主键对持久对象排序,因此值必须是可排序的。

    References: #4232

  • [orm] [bug]

    已删除由 MappedCollection 班级。此转换器仅用于断言传入的字典键与其对应对象的字典键匹配,并且仅在批量设置操作期间使用。转换器可能会干扰自定义验证器或 AttributeEvents.bulk_replace() 希望进一步转换传入值的侦听器。这个 TypeError 当传入密钥与值不匹配时,此转换器将引发此问题;在大容量分配期间传入的值将被键入其值生成的密钥,而不是字典中显式存在的密钥。

    总之,@转换器被 AttributeEvents.bulk_replace() 作为的一部分添加的事件处理程序 #3896 .

    References: #3604

  • [orm] [bug]

    向延迟加载添加了新的行为,当多对一的“旧”值被检索时,会发生这种情况,这样,由于 lazy="raise" 或者跳过分离的会话错误。

    References: #4353

  • [orm] [bug]

    ORM中长期存在的监督 __delete__ 多对一关系的方法是不起作用的,例如对于诸如 del a.b . 这现在实现,相当于将属性设置为 None .

    References: #4354

orm declarative

  • [orm] [declarative] [bug]

    修复了声明性不更新 Mapper 当映射器属性集合已经被调用和记录后,当添加或删除其他属性时,会出现哪些属性。另外,一个 NotImplementedError 如果从当前映射的类中删除完全映射的属性(例如列、关系等),则现在引发,因为如果删除该属性,映射器将无法正常工作。

    References: #4133

engine

  • [engine] [feature]

    将新的“后进先出”模式添加到 QueuePool ,通常通过设置标志启用 create_engine.pool_use_lifo 是真的。”“后进先出”模式意味着刚签入的相同连接将是第一个再次签出的连接,允许在仅部分使用池期间从服务器端清除多余的连接。拉车请求由Taem Park提供。

sql

  • [sql] [feature]

    重构的 SQLCompiler 揭发 SQLCompiler.group_by_clause() 方法类似于 SQLCompiler.order_by_clause()SQLCompiler.limit_clause() 方法,可由方言重写以自定义Group By呈现方式。拉请求礼遇塞缪尔周。

    This change is also backported to: 1.2.13

  • [sql] [feature]

    补充 Sequence 到将呈现有意义字符串表达式的“字符串SQL”系统 ("<next sequence value: my_sequence>" )在没有方言的情况下进行字符串化时,包含“sequence nextvalue”表达式的语句,而不是引发编译错误。

    References: #4144

  • [sql] [feature]

    添加了新的命名约定标记 column_0N_namecolumn_0_N_name 等,它将呈现特定约束在序列中引用的所有列的名称/键/标签。为了适应这种命名约定的长度,SQL编译器的自动截断功能现在也应用于约束名称,它为约束创建了一个缩短的、确定生成的名称,该名称将应用于目标后端,而不超过该后端的字符限制。

    这一变化还修复了另外两个问题。一个是 column_0_key 令牌不可用,即使记录了此令牌,另一个是 referred_column_0_name 令牌将不经意地呈现 .key 而不是 .name 如果这两个值不同,则返回该列。

    References: #3989

  • [sql] [feature]

    向“expanding in”绑定参数功能添加了新的逻辑,这样,如果给定的列表为空,则会生成一个特定于不同后端的特殊“empty set”表达式,从而允许in表达式是完全动态的,包括表达式中的空表达式。

    References: #4271

  • [sql] [feature]

    Python 内置 dir() 现在支持SQLAlchemy“属性”对象,例如核心列集合(例如 .cmapper.attrs 等等,也允许ipython自动完成。拉请求由Uwe Korn提供。

  • [sql] [feature]

    添加了新功能 FunctionElement.as_comparison() 它允许SQL函数充当可以在ORM中工作的二进制比较操作。

    References: #3831

  • [sql] [bug]

    添加基于“like”的运算符作为“comparison”运算符,包括 ColumnOperators.startswith() ColumnOperators.endswith() ColumnOperators.ilike() ColumnOperators.notilike() 因此,所有这些运算符都可以作为ORM“primaryjoin”条件的基础。

    References: #4302

  • [sql] [bug]

    已修复问题 TypeEngine.bind_expression()TypeEngine.column_expression() 如果目标类型是 Variant 或其他目标类型 TypeDecorator . 此外,SQL编译器现在在呈现这些方法时调用方言级别的实现,以便方言现在可以为内置类型提供SQL级别的处理。

    References: #3981

postgresql

  • [postgresql] [feature]

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

    This change is also backported to: 1.2.7

    References: #4160

  • [postgresql] [feature]

    添加了对PostgreSQL分区表反射的基本支持,例如将relkind='p'添加到返回表信息的反射查询中。

    References: #4237

mysql

  • [mysql] [feature]

    在mysql中添加了对create fulltext index的“with parser”语法的支持,使用 mysql_with_parser 关键字参数。反射也被支持,它适应了MySQL的特殊注释格式,用于报告这个选项。此外,“全文”和“空间”索引前缀现在反射回 mysql_prefix 索引选项。

    References: #4219

  • [mysql] [feature]

    在mysql上添加了对要排序的on-duplicate key update语句中参数的支持,因为mysql update子句中的参数顺序非常重要,与中描述的方式类似 参数顺序更新 . 拉请求由Maxim Bublis提供。

  • [mysql] [feature]

    连接池的“预ping”功能现在使用 ping() 对于mysqlclient、pymysql和mysql connector python,dbapi连接的方法。拉请求由Maxim Bublis提供。

sqlite

  • [sqlite] [feature]

    通过新的sqlite实现增加了对sqlite的json功能的支持 JSONJSON . 用于类型的名称是 JSON ,以下是在sqlite自己的文档中找到的示例。拉请求由Ilja Everil_

    References: #3850

  • [sqlite] [feature]

    实现了sqlite ON CONFLICT 在DDL级别理解的子句,例如主键、唯一和检查约束,以及在 Column 满足内联主键而不是空值。拉请求礼貌丹尼斯卡塔耶夫。

    References: #4360

mssql

  • [mssql] [feature]

    补充 fast_executemany=True SQL Server pyodbc方言的参数,该参数允许在使用Microsoft ODBC驱动程序时使用pyodbc的同名新性能功能。

    References: #4158

  • [mssql] [bug]

    已弃用 Sequence 用SQL Server来影响标识值的“开始”和“增量”,有利于新参数 mssql_identity_startmssql_identity_increment 直接设置这些参数。 Sequence 将用于生成真实 CREATE SEQUENCE 在将来的版本中使用SQL Server进行DDL。

    References: #4362

oracle

  • [oracle] [feature]

    添加了一个当前仅由cx_Oracle方言使用的新事件, DialectEvents.setiputsizes() . 事件传递的字典 BindParameter 对象到DBAPI特定类型的对象,这些对象在转换为参数名后将传递到cx_Oracle cursor.setinputsizes() 方法。这既允许查看setinputsizes进程,也允许更改传递给此方法的数据类型的行为。

    This change is also backported to: 1.2.9

    References: #4290

  • [oracle] [bug]

    更新了可以发送到cx_Oracle DBAPI的参数,以允许所有当前参数以及尚未添加的未来参数。此外,删除了版本1.2中不推荐使用的未使用参数,此外,我们现在将“threaded”默认为false。

    References: #4369

  • [oracle] [bug]

    Oracle方言将不再使用nchar/nclob数据类型表示通用的Unicode字符串或CLOB字段以及 UnicodeUnicodeText 除非国旗 use_nchar_for_unicode=True 传递给 create_engine() -这包括创建表行为以及 setinputsizes() 对于绑定参数。在读取端,python 2下的自动unicode转换被添加到char/varchar/clob结果行中,以匹配python 3下的cx_Oracle行为。为了减轻在python 2下的性能损失,在python 2下使用了sqlachemy的非常高性能(在构建C扩展时)本机Unicode处理程序。

    References: #4242

misc

Previous: 1.4变更日志 Next: 1.2换热器