1.4变更日志
本文档详细说明了在1.4版本中所做的各个问题级别的更改。有关1.4中新增功能的叙述性概述,请参见 SQLAlchemy 1.4有什么新功能? .
1.4.26
no release dateorm
[orm] [bug] ¶
改进了使用连接表继承配置映射时生成的异常消息,其中两个表没有设置外键关系,或者设置了多个外键关系。消息现在是特定于ORM的,并且包括上下文,
Mapper.inherit_condition
对于不明确的外键情况,可能特别需要参数。[orm] [bug] ¶
修复了在迭代
Result
从一个Session
在那之后Session
将部分地将对象附加到处于基本无效状态的该会话。它现在会引发一个异常,其中包含指向新文档的链接 un-buffered 结果是从Session
已关闭或以其他方式具有Session.expunge_all()
在此之后调用的方法Result
都是生成的。asyncio扩展使用的“PREBUFER_ROWS”执行选项可用于生成Result
其中预缓存了ORM对象,在这种情况下,迭代结果将产生一系列分离的对象。参见
对象无法转换为“”Persistent“”状态,因为此标识映射不再有效。“”
References: #7128
[orm] [bug] ¶
向的功能添加了额外的一层警告消息
Query.join()
和ORM版本的Select.join()
,其中一些“自动别名”继续发生的地方现在将被称为要避免的模式,主要特定于连接表继承区域,其中共享公共基表的类在不使用显式别名的情况下连接在一起。一种情况针对不推荐使用的模式发出遗留警告,另一种情况则完全弃用。对于重叠映射表,ORM join()内的自动别名并不能与所有API(如
contains_eager()
,而不是继续尝试让这些用例在任何地方都能工作,而是用更明确的用户模式替换,这样更清晰,更不容易出错,并且进一步简化了SQLAlChemy的内部结构。警告包括指向errors.rst页面的链接,其中演示了每种模式以及要修复的推荐模式。
参见
[orm] ¶
传递一个
Query
对象为Session.execute()
不是此对象的预期用途,现在将引发弃用警告。References: #6284
examples
[examples] [bug] ¶
修复了Examples/VERVERED_ROWS中的示例,以正确使用SQLAlChemy 1.4 API;当API更改(如从
Session.is_modified()
都是制作出来的,就像do_orm_execute()
添加了事件挂钩。References: #7169
engine
[engine] [bug] ¶
实施得当
__reduce__()
方法,以确保它们在酸洗时都支持干净的往返,因为异常对象通常是序列化的,以供各种调试工具使用。References: #7077
[engine] [bug] ¶
修复了以下问题:不推荐使用
URL
构造函数,该构造函数指示URL.create()
如果传递了包含七个参数的完整位置参数列表,则不会发出应使用的方法;此外,如果以这种方式调用构造函数(以前跳过),则现在将进行URL参数的验证。References: #7130
sql
[sql] [bug] ¶
修复了any_()/all_()函数/方法中的不一致问题,其中这些函数具有“翻转”表达式的特殊行为,使得“any”/“all”表达式在与NONE值进行比较时始终位于右侧,即“column n.any_()==None”应生成与“null()==column.any_()”相同的SQL表达式。还添加了更多文档来澄清这一点,并提到any_()/all_()通常会取代数组版本“any()”/“all()”。
References: #7140
[sql] [bug] ¶
说明
schema
在……里面table()
fullname
属性。References: #7061
mypy
postgresql
[postgresql] [bug] ¶
添加了“SSL系统调用错误:错误地址”错误消息的“断开”条件,该错误消息由mental copg2报告。齐克·布莱奇特尔提供的请求。
References: #5387
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符号以及测试套件。感谢格奥尔格·里希特的支持。
This change is also backported to: 1.3.25
[mysql] [bug] ¶
已修复MySQL中的问题
match()
构造WHERE,传递一个子句表达式,如bindparam()
或者用于“Against”参数的其他SQL表达式将失败。安东·科瓦列维奇提供的请求。References: #7144
mssql
[mssql] [bug] [regression] ¶
修复了SQL Server中的错误
DATETIMEOFFSET
在ODBC实现不会生成正确的DDL的情况下,如果使用dialect.type_descriptor()
方法,该方法的用法在以下文档示例中进行了说明TypeDecorator
,尽管对于大多数数据类型来说不是必需的。回归是由 #6366 。作为此更改的一部分,SQL Server日期类型的完整列表已被修改,以返回生成与超类型相同的DDL名称的“方言执行”。References: #7129
misc
1.4.25
Released: September 22, 2021platform
[platform] [bug] [regression] ¶
修复了由于以下原因导致的回归 #7024 其中,对“平台机”名称的重组由
greenlet
依赖项拼写“aarch64”有误,并根据Windows计算机的需要额外省略了大写“amd64”。詹姆斯·道恩提供的请求。References: #7024
1.4.24
Released: September 22, 2021platform
[platform] [bug] ¶
进一步调整了setup.cfg中的“greenlet”包说明符,以使用较长的“or”表达式链,以便
platform_machine
设置为特定标识符,只与完整字符串匹配。References: #7024
orm
[orm] [usecase] ¶
将加载程序选项添加到
Session.merge()
和AsyncSession.merge()
通过新的Session.merge.options
参数,该参数将给定的加载程序选项应用于get()
由Merge在内部使用,允许在合并过程加载新对象时应用紧急加载关系等。丹尼尔·斯通提供的拉取请求。References: #6955
[orm] [bug] [regression] ¶
修复了将列表达式传递到的ORM问题
query()
或启用ORMselect()
将在对象的标识上进行重复数据消除,例如类似这样的短语select(A.id, null(), null())
将只产生一个“NULL”表达式,这在1.3中是不存在的。但是,更改还允许ORM表达式也按照给定的方式呈现,例如select(A.data, A.data)
将生成包含两列的结果行。References: #6979
[orm] [bug] [regression] ¶
修复了最近修复的问题
Query.with_entities()
方法,其中确定旧ORM自动唯一的标志Query
仅对象将设置为True
在不适当的情况下with_entities()
调用将设置Query
若要返回不唯一的仅列行,请执行以下操作。References: #6924
engine
[engine] [usecase] [asyncio] ¶
改进适配驱动程序(如异步驱动程序)使用的接口,以访问驱动程序返回的实际连接对象。
这个
_ConnectionFairy
对象有两个新属性:_ConnectionFairy.dbapi_connection
始终表示与DBAPI兼容的对象。对于PEP-249驱动程序,这是DBAPI连接,一如既往,以前在.connection
属性。对于SQLAlChemy适配成PEP-249接口的异步驱动程序,返回的对象通常是名为AdaptedConnection
。_ConnectionFairy.driver_connection
始终表示由正在使用的第三方PEP-249DBAPI或异步驱动程序维护的实际连接对象。对于标准PEP-249DBAPI,该对象始终与dbapi_connection
。对于异步CIO驱动程序,它将是底层的仅异步CIO连接对象。
这个
.connection
属性仍然可用,并且现在是.dbapi_connection
。参见
References: #6832
[engine] [usecase] [orm] ¶
添加了新方法
Session.scalars()
,Connection.scalars()
,AsyncSession.scalars()
和AsyncSession.stream_scalars()
,它们为接收面向行的Result
对象并将其转换为ScalarResult
对象通过Result.scalars()
方法,以返回值列表而不是行列表。这些新方法类似于已存在已久的Session.scalar()
和Connection.scalar()
用于仅从第一行返回单个值的方法。米格尔·格林伯格提供的调出请求。References: #6990
[engine] [bug] [regression] ¶
修复了以下问题:
ConnectionEvents.before_execute()
更改传递的SQL语句对象(返回要调用的新对象)的方法被意外删除。此行为已恢复。References: #6913
[engine] [bug] ¶
确保
str()
是在AN上调用的URL.create.password
参数,从而允许使用实现__str__()
方法作为密码属性。还澄清了这样一个对象不适合动态更改每个数据库连接的密码; 生成动态身份验证令牌 应该改为使用。References: #6958
[engine] [bug] ¶
已修复中的问题
URL
其中,“drivername”的验证不会适当地响应None
应为字符串的位置的值。References: #6983
[engine] [bug] [postgresql] ¶
修复了引擎具有
create_engine.implicit_returning
当PostgreSQL的“快速插入许多”功能与Sequence
,以及带有“return_deaults()”的任何类型的“ecutemany”是否与Sequence
。请注意,当将SQL语句传递给驱动程序时,PostgreSQL“快速插入许多”根据定义使用“返回”;总的来说,create_engine.implicit_returning
标志是遗留的,在现代SQLAlChemy中没有实际用途,在单独的更改中将被弃用。References: #6963
sql
[sql] [usecase] ¶
添加了新参数
HasCTE.cte.nesting
发送到CTE
构造函数和HasCTE.cte()
方法,该方法将CTE标记为应该保持嵌套在封闭的CTE中的CTE,而不是移动到最外层的SELECT的顶层。虽然在绝大多数情况下SQL功能没有区别,但用户已经确定了需要CTE构造真正嵌套的各种边缘情况。非常感谢Eric Masseran在这一复杂功能上所做的大量工作。References: #4123
[sql] [bug] ¶
中实现的缺少的方法
FunctionElement
虽然没有使用,但会导致pylint将它们报告为未实现的抽象方法。References: #7052
[sql] [bug] ¶
修复了以下两个问题:
select()
和join()
当适合于形成元素的副本时,不会完全复制与子查询相关联的所有列对象的状态。这导致的一个关键问题是使用ClauseElement.params()
方法(可能应该将其移到遗留类别中,因为它效率低且容易出错)会留下旧的BindParameter
对象,导致在执行时正确设置参数时出现问题。References: #7055
[sql] [bug] ¶
修复了与新版本相关的问题
HasCTE.add_cte()
将两个“INSERT..FROM SELECT”语句同时配对将丢失对两个独立SELECT语句的跟踪,从而导致错误的SQL。References: #7036
[sql] [bug] ¶
修复了将ORM列表达式用作传递给的字典列表中的键的问题
Insert.values()
对于“多值插入”,不会被正确地处理到正确的列表达式中。References: #7060
mypy
[mypy] [bug] ¶
修复了mypy插件在解释
query_expression()
构造。References: #6950
[mypy] [bug] ¶
修复了mypy插件中的问题,如果映射的类依赖于
__tablename__
来自超类的例程。References: #6937
asyncio
[asyncio] [feature] [mysql] ¶
添加了对
asyncmy
MySQL和MariaDB的异步数据库驱动程序。此驱动程序非常新,但似乎是当前唯一可以替代aiomysql
当前似乎未维护且不能与当前Python版本一起使用的驱动程序。非常感谢Long2ice对此方言的拉取请求。参见
References: #6993
[asyncio] [usecase] ¶
这个
AsyncSession
现在支持重写Session
它用作代理实例。一种风俗习惯Session
类可以使用AsyncSession.sync_session_class
参数或通过将AsyncSession
并指定自定义AsyncSession.sync_session_class
。References: #6746
[asyncio] [bug] ¶
修复了中的错误
AsyncSession.execute()
和AsyncSession.stream()
这需要execution_options
成为…的实例immutabledict
定义后。它现在可以正确接受任何映射。References: #6943
[asyncio] [bug] ¶
添加了缺失的内容
**kw
的参数AsyncSession.connection()
方法。[asyncio] [bug] ¶
不建议使用
scoped_session
使用异步驱动程序。在使用Asyncio时,async_scoped_session
应该改为使用。References: #6746
postgresql
[postgresql] [bug] ¶
获得资格
version()
如果用户配置了不同的搜索路径,则调用以避免跟踪问题。References: #6912
[postgresql] [bug] ¶
这个
ENUM
DataType是PostgreSQL原生的,因此不应与一起使用native_enum=False
旗帜。如果将此标志传递给ENUM
DataType并发出警告;以前,该标志会导致类型对象无法正常运行。References: #6106
sqlite
[sqlite] [bug] ¶
修复了pysqlite驱动程序上SQLite无效隔离级别的错误消息无法指示“AUTOCOMMIT”是有效隔离级别之一的错误。
mssql
[mssql] [bug] [reflection] ¶
修复了以下问题
sqlalchemy.engine.reflection.has_table()
退货True
用于实际属于不同SQL Server会话(连接)的本地临时表。现在执行额外的检查,以确保检测到的临时表实际上属于当前会话。References: #6910
oracle
[oracle] [bug] [performance] ¶
向针对Oracle系统视图(如ALL_TABLES、ALL_TAB_CONSTRAINTS等)的反射查询中使用的“TABLE NAME”、“OWNER”和其他DDL-NAME参数添加了强制转换(VARCHAR2(128)),以便更好地针对这些列建立索引,因为以前由于Python对字符串使用Unicode,它们将被隐式处理为NVARCHAR2;这些列在所有Oracle版本中都记录为VARCHAR2,长度从30个字符到128个字符不等,具体取决于服务器此外,还针对Oracle数据库启用了对Unicode命名的DDL结构的测试支持。
References: #4486
1.4.23
Released: August 18, 2021general
[general] [bug] ¶
已对设置要求进行了如下修改
greenlet
仅对那些众所周知的平台是默认要求greenlet
是可安装的,并且在pypi上已经有一个预构建的二进制文件;当前列表是x86_64 aarch64 ppc64le amd64 win32
。对于其他平台,默认情况下不会安装greenlet,这应该可以在不支持的平台上安装和测试套件运行SQLAlChemy 1.4greenlet
,不包括任何异步CIO功能。要与一起安装,请使用greenlet
包括在上述列表之外的计算机体系结构上的依赖项,则[asyncio]
可以通过运行以下命令来包含额外的内容pip install sqlalchemy[asyncio]
然后,它将尝试安装greenlet
。此外,测试套件已修复,以便在未安装greenlet时完全完成测试,并对异步相关测试进行适当的跳过。
References: #6136
orm
[orm] [usecase] ¶
添加了新属性
Select.columns_clause_froms
属性的COLUMNS子句隐含的FROM列表Select
声明。这与旧的不同Select.froms
集合,因为它不执行任何ORM编译步骤,这些步骤必须取消对from元素的注释,并执行诸如计算联接加载等操作,这使得它不是合适的候选对象。Select.select_from()
方法。此外,还添加了一个新参数Select.with_only_columns.maintain_column_froms
将此集合转移到Select.select_from()
在替换Columns集合之前。此外,
Select.froms
已重命名为Select.get_final_froms()
强调这个集合不是一个简单的访问器,而是在给定对象的完整状态的情况下进行计算,当在ORM上下文中使用时,这可能是一个代价高昂的调用。此外,还修复了涉及
with_only_columns()
函数以支持将条件应用于替换为以下任一项的列元素Select.with_only_columns()
或Query.with_entities()
,它已经破裂,作为 #6503 在1.4.19中发布。References: #6808
[orm] [bug] [sql] ¶
修复了在单个语句中同时使用绑定参数的多个克隆时,“克隆”的绑定参数对象将在编译器中导致名称冲突的问题。这种情况尤其可能发生在ORM单表继承查询中,这些查询在一个查询中多次指示相同的“鉴别器”值。
References: #6824
[orm] [bug] ¶
修复了加载程序策略中的问题,其中使用
Load.options()
方法,特别是当嵌套多个调用时,将生成过长的且更重要的是不确定的缓存键,从而导致非常大的缓存键,这也不允许高效地使用缓存,无论是在使用的总内存方面还是在缓存本身中使用的条目数量方面都是如此。References: #6869
[orm] [bug] ¶
修订了
ORMExecuteState.user_defined_options
访问者接收UserDefinedOption
以及来自上下文的相关选项对象,特别强调在加载器策略上的“selectinload”,这在以前是不起作用的;其他策略没有这个问题。现在无条件地传播与正在执行的当前查询相关联的对象,而不是与正在缓存的查询相关联的对象。这实质上将它们从“加载器策略”选项中分离出来,“加载器策略”选项显式地与查询的编译状态相关联,并且需要与缓存的查询相关地使用。此修复的效果是,用户定义的选项(如由dogpile.cached示例使用的选项)以及其他配方(如为水平共享扩展定义“shard id”)将被正确传播到急切和懒惰的加载器,而不管最终是否调用了缓存的查询。
References: #6887
[orm] [bug] ¶
修复了在启用SQLALCHEMY_WARN_20时,工作单元将在内部使用已弃用的SQL表达式形式,并发出弃用警告的问题。
References: #6812
[orm] [bug] ¶
已修复中的问题
selectinload()
在哪里使用新的PropComparator.and_()
嵌套超过一层的选项中的功能将无法更新嵌套条件中的绑定参数值,这是SQL语句缓存的副作用。References: #6881
[orm] [bug] ¶
调整了ORM加载器内部,不再使用1.4中添加的“lambda缓存”系统,并修复了一个位置,该位置仍在使用以前的“烘焙查询”系统进行查询。Lambda缓存系统仍然是减少构建具有相对固定使用模式的查询的开销的有效方式。在加载器策略的情况下,使用的查询负责遍历大量的任意选项和标准,这些选项和标准由最终用户代码生成,有时也由最终用户代码使用,这使得lambda缓存概念的效率并不比不使用它更高,但代价是更复杂。特别是通过以下方式注意到的问题 #6881 和 #6887 通过在内部删除此功能,可以大大降低复杂程度。
[orm] [bug] ¶
修复了以下问题:
Bundle
构造不会创建正确的缓存键,从而导致查询缓存的使用效率低下。这对“selectinload”策略产生了一些影响,并被确定为 #6889 。References: #6889
sql
[sql] [bug] ¶
修复中的问题
CTE
哪里是新的HasCTE.add_cte()
1.4.21版新增方法/ #6752 无法正确运行“复合选择”结构,例如union()
,union_all()
,except()
等等。埃里克·马瑟兰提供的拉取请求。References: #6752
[sql] [bug] ¶
修复了中的一个问题
CacheKey.to_offline_string()
方法,其中尝试从惰性加载器生成的特殊“lambda”查询创建正确的缓存键将无法包括参数值,从而导致不正确的缓存键。References: #6858
[sql] [bug] ¶
调整了“From Linter”警告特性,以适应ON子句不显式匹配目标的超过一层深度的连接链,例如“ON TRUE”这样的表达式。这种使用模式的目的是取消笛卡尔产品警告,因为存在从“a到b”的连接,这不适用于连接链具有多个元素的情况。
References: #6886
[sql] [bug] ¶
修复了lambda缓存系统中的问题,在该问题中,没有生成缓存键的查询元素(如自定义选项或子句元素)仍会错误地填充“lambda缓存”中的表达式。
schema
[schema] [enum] ¶
统一行为
Enum
在本机和非本机实现中,涉及具有别名元素的枚举的接受值。什么时候Enum.omit_aliases
是False
所有值(包括别名)都被接受为有效值。什么时候Enum.omit_aliases
是True
只有非别名的值才被接受为有效值。References: #6146
mypy
[mypy] [usecase] ¶
添加了对在用户代码中使用“Generic class”语法定义的SQLAlChemy类的支持,如
sqlalchemy2-stubs
,例如Column[String]
中的这些构造,而不需要限定这些构造。TYPE_CHECKING
挡路通过实现Python的特殊方法__class_getitem__()
,这允许此语法在运行时不出错地传递。
postgresql
[postgresql] [bug] ¶
向PostgreSQL的“Overlaps”、“Contained_By”、“Contains”运算符添加了“IS_COMPARISON”标志,以便它们可以在相关的ORM上下文中工作,也可以与“From Linter”功能结合使用。
References: #6886
mssql
[mssql] [bug] [sql] ¶
修复了以下问题:
literal_binds
外部用于以内联方式呈现绑定参数的编译器标志在与称为“文字_执行”的特定参数类一起使用时将无法工作,该参数类涵盖了驱动程序不允许绑定参数的方言的限制和偏移值等内容,例如SQL Server的“top”子句。本地问题似乎只影响MSSQL方言。References: #6863
misc
[bug] [ext] ¶
修复了水平分片扩展无法正确容纳传递到的纯文本SQL语句的问题
Session.execute()
。References: #6816
1.4.22
Released: July 21, 2021orm
[orm] [bug] ¶
已修复新版本中的问题
Table.table_valued()
方法,其中产生的TableValuedColumn
构造不会像在整个ORM中使用的那样正确响应别名适配,例如用于紧急加载、多态加载等。References: #6775
[orm] [bug] ¶
修复了使用
Result.unique()
方法,其ORM结果包含具有不可散列类型的列表达式,例如JSON
或ARRAY
使用非元组将以静默方式退回到使用id()
函数,而不是引发错误。这现在会在以下情况下引发错误:Result.unique()
方法用于2.0样式的ORM查询。此外,对于未知类型的结果值,假定哈希性为True,就像使用未知返回类型的SQL函数时经常发生的那样;如果值确实不可哈希,则hash()
它本身就会上升。对于遗留ORM查询,因为遗留的
Query
对象是唯一的。在所有情况下,旧规则都保持不变,因此将使用id()
对于未知类型的结果值,因为这种传统的唯一性主要用于唯一性ORM实体,而不是列值。References: #6769
[orm] [bug] ¶
修复了这样一个问题:由于弱引用字典的迭代,在测试套件拆卸等操作期间清除映射器可能会在垃圾收集期间导致“字典更改大小”警告。一个
list()
已应用,以防止并发GC影响此操作。References: #6771
[orm] [bug] [regression] ¶
修复了ORM的持久性功能使用INSERT的关键缓存问题。当混合“大容量保存”和标准“刷新”形式的INSERT时,返回将缓存不正确的查询。
References: #6793
engine
[engine] [bug] ¶
增加了一些防范措施
KeyError
在事件系统中,以适应解释器同时关闭的情况Engine.dispose()
正在被调用,这将导致堆栈跟踪警告。References: #6740
sql
[sql] [bug] ¶
修复了使用
case.whens
参数按位置传递字典,而不是作为关键字参数传递,将发出2.0弃用警告,表示不建议按位置传递列表。按位置传递的字典格式“Whens”仍受支持,并被意外标记为已弃用。References: #6786
[sql] [bug] ¶
方法时不会调用特定于类型的绑定参数处理程序的问题
Insert.values()
方法使用PythonNone
值;特别是在使用JSON
DataType以及相关的PostgreSQL特定类型,例如JSONB
它将无法对Python进行编码None
值转换为JSON NULL,但是该问题被推广到任何绑定参数处理程序,并与此特定方法结合使用Insert
。References: #6770
1.4.21
Released: July 14, 2021orm
[orm] [usecase] ¶
修改了用于标量对象关系历史跟踪的方法,这些关系不是多对一,即本来是一对多的一对一关系。当替换一对一的值时,将被替换的“旧”值不再立即加载,而是在刷新过程中处理。这消除了在为一对一属性赋值时经常出现的历史上麻烦的延迟负载,并且在使用“lazy=‘raise’”以及异步用例时尤其麻烦。
此更改确实会导致
AttributeEvents.set()
事件,即应用于此类一对一属性的事件在卸载时将不再接收“old”参数,并且应用于此类一对一属性的事件将不再接收“old”参数。relationship.active_history
未设置标志。如中所述AttributeEvents.set()
,如果事件处理程序需要在事件触发时接收“旧”值,则必须使用事件侦听器或关系建立ACTIVE_HISTORY标志。这已经是其他类型的属性(如多对一和列值引用)的行为。另外,如果“旧”值本地存在于会话中,但不会加载到相关关系上,则更改将推迟更新“旧”值上的backref,直到下一次刷新发生。如果这会导致问题,也是正常的
relationship.active_history
标志可以设置为True
关于这段关系。References: #6708
[orm] [bug] [regression] ¶
修复了1.4.19中由于以下原因导致的回归 #6503 以及相关的涉及
Query.with_entities()
如果使用的新结构会被不适当地转移到封闭的Query
当使用集合运算(如Query.union()
使得内部的联接指令也应用于外部查询。References: #6698
[orm] [bug] [regression] ¶
修复了1.4.3版中出现的回归问题,原因是 #6060 限制派生可选对象的ORM适配的规则与其他基于ORM适配的情况相冲突,在这种情况下,当将适配应用于
with_polymorphic()
针对使用column_property()
它进而利用标量选择,该标量选择包括aliased()
对象的映射表。References: #6762
[orm] [regression] ¶
修复了ORM回归,其中为混合属性和潜在的其他类似类型的启用ORM的表达式生成的即席标签名称通常会通过子查询向外传播,从而允许名称保留在结果集的最终键中,即使在从子查询中进行选择时也是如此。现在可以跟踪其他状态,在这种情况下,当从核心选择/子查询中选择混合时,这些状态不会丢失。
References: #6718
sql
[sql] [usecase] ¶
添加了新方法
HasCTE.add_cte()
发送到每个select()
,insert()
,update()
和delete()
构造。此方法将把给定的CTE
作为语句的“独立”CTE,这意味着它在语句上方的WITH子句中无条件呈现,即使在主语句中没有以其他方式引用。这是PostgreSQL数据库上的一个流行用例,在该数据库中,CTE用于独立于主语句针对数据库行运行的DML语句。References: #6752
[sql] [bug] ¶
修复了CTE构造中的问题,在该构造中,引用具有重复列名的SELECT的递归CTE无法在WITH子句中正确引用已消除重复的标签名,这些列名通常使用1.4中的标签逻辑进行重复数据消除。
References: #6710
[sql] [bug] [regression] ¶
修复了以下情况下的回归问题
tablesample()
构造在给定没有嵌入到SQL函数中的浮点采样值时将无法执行。References: #6735
postgresql
[postgresql] [bug] ¶
已修复中的问题
Insert.on_conflict_do_nothing()
和Insert.on_conflict_do_update()
其中,唯一约束的名称作为constraint
如果参数基于为PostgreSQL最大标识符长63个字符生成过长名称的命名约定,则不会正确截断其长度,这与CREATE TABLE语句中发生的方式相同。References: #6755
[postgresql] [bug] ¶
修复了PostgreSQL
ENUM
中嵌入的数据类型ARRAY
数据类型在创建/删除过程中将无法在以下情况下正确发出schema_translate_map
功能也在使用中。另外修复了一个相关问题,其中相同的schema_translate_map
功能将不适用于ENUM
DataType与CAST
,这也是ARRAY(ENUM)
组合适用于PostgreSQL方言。References: #6739
[postgresql] [bug] ¶
已修复中的问题
Insert.on_conflict_do_nothing()
和Insert.on_conflict_do_update()
其中,唯一约束的名称作为constraint
如果参数包含需要引号的字符,则不会正确引号。References: #6696
mssql
[mssql] [bug] [regression] ¶
中使用点分架构名称时,SQL Server方言的特殊点分架构名称处理将无法正常运行的问题已修复
schema_translate_map
功能。References: #6697
1.4.20
Released: June 28, 2021orm
[orm] [bug] [regression] ¶
修复了ORM中有关
with_polymorphic()
当在处理查询时对面向用户的对象进行垃圾回收时,构造。重新构建不能确保“多态”情况的子实体得到处理,从而导致AttributeError
。References: #6680
[orm] [bug] [regression] ¶
调整后的
Query.union()
和类似的集合操作,以便与刚刚添加的新功能正确兼容 #6661 ,在SQLAlChemy 1.4.19中,这样呈现为UNION或其他SET操作的元素的SELECT语句将包括映射为延迟的直接映射列;这既修复了涉及多层嵌套的UNION的回归,这将产生列不匹配,还允许undefer()
选项,以在此类Query
而不必将选项应用于联合内的每个元素。References: #6678
[orm] [bug] ¶
已调整映射器中用作
@validates
验证器函数或@reconstructor
重新构造函数,以便更自由地检查“可调用”,例如根据基本属性(如__func__
和__call___
,而不是测试MethodType
/FunctionType
,允许像cython函数这样的东西正常工作。拉请求提供MiłOsz Stypiń滑雪。References: #6538
engine
[engine] [bug] ¶
修复了C扩展中用于
Row
类,在不太可能的情况下可能会导致内存泄漏。Row
对象,该对象引用ORM对象,然后将该对象突变为引用回Row
它本身,创造了一个循环。用于跟踪GC周期的Python C API已添加到本机Row
实现来适应这种情况。References: #5348
[engine] [bug] ¶
修复了旧问题,其中
select()
对令牌“*”进行的操作(然后恰好生成一列)将无法正确组织cursor.description
列名添加到结果对象的键中。References: #6665
sql
[sql] [usecase] ¶
将Impl参数添加到
PickleType
构造函数,允许使用任何任意类型来代替默认实现LargeBinary
。拉动请求,有礼貌的jason3gb。References: #6646
[sql] [bug] [orm] ¶
修复了的类层次结构
Sequence
而且越笼统DefaultGenerator
基类,因为这些是“可执行的”语句,它们需要包含Executable
在他们的等级制度中,不仅仅是StatementRole
就像被任意应用于Sequence
以前。修复程序允许Sequence
在所有地方工作.execute()
方法,包括使用Session.execute()
它在以下情况下不起作用:SessionEvents.do_orm_execute()
还建立了处理程序。References: #6668
schema
[schema] [bug] ¶
修复了通过以下位置时出现的问题
None
对于Table.prefixes
不会存储空列表,而是存储常量None
,这对于第三方方言来说可能是意想不到的。最近版本的Alembic中的一个用法显示了该问题None
对于此值。凯·穆勒提供的请求。References: #6685
mysql
[mysql] [usecase] ¶
对MySQL方言的表反射功能进行了小的调整,以适应其他面向MySQL的数据库,如TiDB,这些数据库在“create table”中的约束指令末尾包含它们自己的“Comment”指令,其中格式在注释之后没有额外的空格字符,在本例中是TiDB“聚集索引”功能。由Daniël van Eeden提供拉取请求。
References: #6659
misc
[bug] [ext] [regression] ¶
修复了中的回归问题
sqlalchemy.ext.automap
扩展,以便将显式映射类创建到同时也是relationship.secondary
元素中的一个元素relationship()
将生成的自动地图将发出1.4中引入的“重叠”警告,并在 关系X会将列Q复制到列P,这与关系冲突:‘Y’ 。虽然从自动地图生成此案例仍然受到“重叠”警告所指的相同警告的限制,因为自动地图旨在用于更多特别的用例,但是当生成与此特定模式的多对多关系时,生成警告的条件将被禁用。References: #6679
1.4.19
Released: June 22, 2021orm
[orm] [bug] [regression] ¶
修复了与的相同区域中的进一步回归 #6052 其中加载程序选项以及调用方法(如
Query.join()
如果选项/联接所依赖的语句的左侧被替换为Query.with_entities()
方法时,或者在使用2.0样式查询时使用Select.with_only_columns()
方法。一组新的状态已经添加到对象中,它跟踪选项/联接所针对的“左”实体,并在更改引导实体时记录这些“左”实体。[orm] [bug] ¶
改进了与延迟列和列属性相关的ORM子查询呈现行为,使其与1.3更兼容,同时还提供了1.4的新特性。因为1.4中的子查询不使用加载器选项,包括
undefer()
,针对具有延迟属性的ORM实体的子查询现在将呈现那些直接引用映射表列的延迟属性,因为如果外部选择使用这些列,则在外部选择中需要这些属性;但是,引用组合SQL表达式的延迟属性就像我们通常处理的那样column_property()
不会是子查询的一部分,因为如果子查询需要,可以显式选择它们。如果实体是从该子查询中选择的,则根据派生子查询列,列表达式仍然可以呈现在“外部”上。这基本上会产生与使用1.3时相同的行为。但是,在这种情况下,修复程序还必须确保.selected_columns
启用ORM的集合select()
还遵循这些规则,特别是允许递归CTE在此场景中正确呈现,之前由于此问题而无法正确呈现。References: #6661
sql
[sql] [bug] ¶
修复了主要与ORM用例相关的CTE构造中的问题,在这些用例中,针对“匿名”标签(如ORM中看到的标签)使用递归CTE
column_property()
映射将呈现在WITH RECURSIVE xyz(...)
节作为其原始内部标签,而不是完全匿名的名称。References: #6663
mypy
asyncio
[asyncio] [usecase] ¶
实施
async_scoped_session
要解决某些异步相关的不兼容问题,请执行以下操作scoped_session
和AsyncSession
,其中一些方法(特别是async_scoped_session.remove()
方法)应与await
关键字。参见
References: #6583
[asyncio] [bug] [postgresql] ¶
修复了异步实现中的错误,其中greenlet适配系统无法传播
BaseException
子类,最值得注意的包括asyncio.CancelledError
到引擎用来使连接无效和清除连接的异常处理逻辑,从而防止在取消任务时正确处理连接。References: #6652
postgresql
[postgresql] [bug] [oracle] ¶
修复了以下问题:
INTERVAL
PostgreSQL和Oracle上的DataType将生成AttributeError
对象的比较操作的上下文中使用时timedelta()
对象。向达拉斯少校提出请求。References: #6649
[postgresql] [bug] ¶
修复了池“预平”功能将隐式启动事务的问题,该事务随后将干扰自定义事务标志,如PostgreSQL的“只读”模式(当与mental copg2驱动程序一起使用时)。
References: #6621
mysql
mssql
[mssql] [change] ¶
改进了pymssql方言使用的服务器版本regexp,以防止在版本字符串无效的情况下regexp溢出。
[mssql] [bug] ¶
修复了“SCHEMA_TRANSLATE_MAP”功能无法与插入到具有标识列的表中一起正确工作的错误,其中标识列的值是在插入的值中指定的,从而触发SQLAlChemy将标识插入设置为“ON”的功能;在此指令中,架构转换映射将无法执行。
References: #6658
1.4.18
Released: June 10, 2021orm
[orm] [bug] ¶
阐明了
relationship.bake_queries
标志,该标志在1.4中用于在“lazyload”和“selectinload”加载器策略中启用或禁用语句的“lambda缓存”;这与用于大多数语句的更基本的SQL查询缓存是分开的。此外,惰性加载器不再将自己的缓存用于多对一SQL查询,这是任何其他加载器场景中都不存在的实现怪癖。最后,在处理大量的类/关系组合时,lazyloader和selectinloader策略可能发出的“lru cache”警告已被删除;根据对一些最终用户案例的分析,该警告不会显示任何重大问题。在设置时bake_queries=False
因为这样的关系会将该缓存从使用中移除,在这种情况下没有特别的性能提升,因为与使用经常需要刷新的缓存相比,使用不使用缓存的情况下仍然可能在使用的缓存方面占上风。[orm] [bug] [regression] ¶
调整了类(如
scoped_session
和AsyncSession
都是从基址生成的Session
类,以便客户Session
子类(如Flask-SQLAlChemy使用的子类)在调用超类方法时不需要实现位置参数,并且可以继续使用与以前版本中相同的参数样式。References: #6285
[orm] [bug] [regression] ¶
修复了针对涉及连接表继承的复杂左侧的JoinedLoad的查询生成由于子句适应问题而无法生成正确查询的问题。
References: #6595
[orm] [bug] [performance] [regression] ¶
修正了涉及ORM如何将给定的映射列解析为结果行的回归问题,在诸如联接的紧急加载等情况下,由于从1.3起删除的某些逻辑,设置此解析可能会发生代价稍高的“回退”。该问题还可能导致在将1.4样式的查询与联接的紧急加载一起使用时,发出涉及列解析的弃用警告。
References: #6596
[orm] [bug] ¶
修正了实验性“从插入/更新中选择ORM对象”用例中的问题,在该用例中,如果语句针对的是单表继承子类,则会引发错误。
References: #6591
[orm] [bug] ¶
为以下对象发出的警告
relationship()
当多个关系在写入的外键属性方面彼此重叠时,现在包括用于每个警告的特定“Overlaps”参数,以便在不更改映射的情况下使警告静默。References: #6400
asyncio
[asyncio] [usecase] ¶
实现了新的注册表体系结构,该体系结构允许
Async
对象的版本,如AsyncSession
,AsyncConnection
等等,以便在给定代理的“同步”对象的情况下是可定位的,即Session
,Connection
。以前,根据使用此类查找函数的程度,Async
对象将在每次重新创建,这并不理想,因为“异步”对象的标识和状态不会在调用之间保留。从那里开始,新的帮助器函数
async_object_session()
,async_session()
以及一个新的InstanceState
属性InstanceState.async_session
已添加,用于检索原始AsyncSession
与ORM映射对象相关联的Session
与一个AsyncSession
,和一个AsyncSession
与一个InstanceState
,分别为。此修补程序还实现了新方法
AsyncSession.in_nested_transaction()
,AsyncSession.get_transaction()
,AsyncSession.get_nested_transaction()
。References: #6319
[asyncio] [bug] ¶
修复了在使用
NullPool
或者StaticPool
使用异步引擎。这主要影响了Aosqlite方言。References: #6575
[asyncio] [bug] ¶
已添加
asyncio.exceptions.TimeoutError
,asyncio.exceptions.CancelledError
作为所谓的“出口异常”,一类异常包括如下内容GreenletExit
和KeyboardInterrupt
,这些事件被认为是需要将DBAPI连接视为处于不可用状态的事件,在该状态下应该回收该连接。References: #6592
postgresql
[postgresql] [bug] [regression] ¶
修复了回归问题,在这种情况下,如果PostgreSQL“INSERT..ON CONFLICT”结构与“SET”子句中的绑定参数一起用于“Executemany”上下文中,则使用PostgreSQL“INSERT..ON Confliction”结构将无法与mental copg2驱动程序一起使用,这是因为隐式使用了不适合此风格INSERT语句的mental copg2快速执行帮助器;由于这些帮助器是1.4中的默认帮助器,因此这实际上是一种回归。添加了从该特定扩展中排除此类语句的附加检查。
References: #6581
sqlite
[sqlite] [bug] ¶
添加有关URL中传递的pysqlcipher的加密相关编译指示的注释。
This change is also backported to: 1.3.25
References: #6589
[sqlite] [bug] [regression] ¶
版本1.4.3中发布的pysqlcipher修复程序 #5848 不幸的是没有工作,因为新的
on_connect_url
挂钩错误地没有接收到URL
对象的正常用法下的create_engine()
而是接收到一个未处理的字符串;测试套件无法完全设置调用此挂钩的实际条件。此问题已修复。References: #6586
1.4.17
Released: May 29, 2021orm
[orm] [bug] [regression] ¶
修复了由#6550中提到的刚刚发布的性能修复导致的回归,其中,如果仅针对非ORM结构进行查询,则关系的query.join()可能会产生AttributeError,这是一种相当不寻常的调用模式。
References: #6558
1.4.16
Released: May 28, 2021general
orm
[orm] [bug] ¶
修复了使用时出现的问题
relationship.cascade_backrefs
参数设置为False
,按以下哪一项 cascade_backrefs行为在2.0中不推荐删除 将设置为SQLAlChemy 2.0中的标准行为,其中将项添加到唯一的集合中,例如set
或dict
如果该对象已通过BackRef在该集合中关联,则无法激发级联事件。此修复通过引入新的事件状态来表示集合机制的根本变化,即使集合没有净更改,该状态也可以触发集合突变;该操作现在适合使用新的事件挂接AttributeEvents.append_wo_mutation()
。References: #6471
[orm] [bug] [regression] ¶
修复了涉及带标签的ORM复合元素的子句适配的回归问题,例如带有条件或CASE表达式的单表继承鉴别器表达式,这可能会导致别名表达式(如ORM JOIN/JOINEDLOAD操作中使用的那些表达式)无法正确适配,例如在联接的ON子句中引用错误的表。
此更改还改进了位于调用过程中的性能提升
Select.join()
给定一个ORM属性作为目标。References: #6550
[orm] [bug] [regression] ¶
修复了回归问题,其中联接继承、全局WITH_PHOMIC、自引用关系和联接加载的完全组合将无法生成具有惰性加载范围的查询,并且对象刷新操作也会尝试呈现联接加载程序。
References: #6495
[orm] [bug] ¶
增强了以下项的绑定解析规则
Session.execute()
因此,当非ORM语句(如insert()
构造仍然是针对ORM对象构建的,在可能的最大程度上,将使用ORM实体来解析绑定,例如Session
它在一个公共超类上设置了一个绑定映射,而没有在映射中命名特定的映射器或表。References: #6484
engine
[engine] [bug] ¶
修复了以下问题:
@
如果URL还包含UserName:Password部分,则无法正确解释URL的数据库部分。References: #6482
[engine] [bug] ¶
修复了一个长期存在的问题
URL
如果URL不包含带反斜杠的数据库部分,则问号后面的查询参数将无法正确解析。References: #6329
sql
[sql] [bug] [regression] ¶
修复了动态加载程序策略中的回归问题
relationship()
总体而言,relationship.order_by
参数被存储为可变列表,当与针对动态查询对象使用的其他“ORDER_BY”方法结合使用时,该列表可能会发生变化,从而导致ORDER BY条件继续重复增长。References: #6549
mssql
[mssql] [usecase] ¶
实施了对
CTE
构造,以直接用作delete()
构造,即“WITH.AS CTE从CTE中删除”。这似乎是SQL Server的一个有用功能。References: #6464
misc
[bug] [ext] ¶
修复了使用时发出的弃用警告
automap_base()
而不传递现有的Base
。References: #6529
[bug] [pep484] ¶
从代码中删除Pep484类型。当前的工作是围绕存根包进行的,在两个地方键入会让事情变得更糟,因为与存根中的版本相比,SQLAlChemy源代码中的类型通常都是过时的。
References: #6461
[bug] [ext] [regression] ¶
修复了
sqlalchemy.ext.instrumentation
阻止检测处理完全工作的扩展。此修复既包括1.4回归修复,也包括对1.3中存在的相关问题的修复。作为此更改的一部分,sqlalchemy.ext.instrumentation.InstrumentationManager
类现在有了一个新方法unregister()
,它取代了以前的方法dispose()
,从1.4版开始不再调用。References: #6390
1.4.15
Released: May 11, 2021general
[general] [feature] ¶
SQLAlChemy中的警告系统采用了一种新的方法,可以动态准确地预测每个警告的合适堆栈级别。这样可以更直接地评估SQLAlChemy生成的警告和弃用警告的源代码,因为警告将指示最终用户代码中的源代码行,而不是SQLAlChemy自己的源代码中的任意级别。
References: #6241
orm
[orm] [bug] [regression] ¶
修正了“急切加载程序在未到期时运行”功能导致的额外回归问题 #1763 该功能将在其中运行一段时间
contains_eager()
EagerLoad选项,如果contains_eager()
链接到另一个急切加载器选项,这将产生不正确的查询,因为原始的查询绑定联接条件不再存在。References: #6449
[orm] [bug] ¶
修复了子查询加载器策略中阻止缓存正常工作的问题。对于发出的所有子查询负载SQL,这将在日志中被视为一条“生成的”消息,而不是“缓存”,这会使缓存中的新键饱和,从而降低整体性能;它还会生成“LRU大小警告”警告。
References: #6459
sql
[sql] [bug] ¶
调整了作为的一部分添加的逻辑 #6397 因此在1.4.12中,
BindParameter
对象像以前一样发生在子句构造阶段,而不是在编译阶段。在后一种情况下,突变仍然对传入的构建体产生副作用,另外还可能潜在地干扰其他内部突变例程。References: #6460
mysql
[mysql] [bug] [documentation] ¶
添加了对
ssl_check_hostname=
参数,并更新了有关安全连接的MySQL方言文档。最初的拉取请求由Jerry赵提供。References: #5397
1.4.14
Released: May 6, 2021orm
[orm] [bug] [regression] ¶
涉及固定回归的固定回归
lazy='dynamic'
与分离的对象结合使用的加载器。以前的行为是动态加载器在调用方法(如.all()
返回分离对象的空列表,没有错误,这已恢复;但是现在会发出警告,因为这不是正确的结果。其他动态加载器方案正确引发DetachedInstanceError
。References: #6426
engine
[engine] [usecase] [orm] ¶
将一致的行为应用于调用
.commit()
或.rollback()
在现有的.begin()
上下文管理器,在提交或回滚之后增加了挡路中可能发出的sql。此更改将在第一次添加到中时继续 #6155 中调用“回滚”的用例.begin()
上下文管理器挡路被提议:呼叫
.commit()
或.rollback()
现在允许在所有范围内无错误或警告,包括传统范围和未来范围Engine
,ORMSession
,异步AsyncEngine
。在此之前,Session
不允许这样做。然后关闭上下文管理器的剩余作用域;当挡路结束时,发出检查以查看事务是否已经结束,如果已经结束,则挡路返回而不执行任何操作。
它现在会举起 一个错误 如果在挡路内发出任何类型的后续sql, 之后
.commit()
或.rollback()
被称为。挡路应该关闭,因为否则可执行对象的状态在此状态下将是未定义的。
References: #6288
[engine] [bug] [regression] ¶
已建立弃用路径,用于调用
CursorResult.keys()
方法用于不返回任何行的语句,以提供对“记录”包以及任何其他非迁移应用程序使用的遗留模式的支持。以前,这会引发ResourceClosedException
以与尝试提取行时相同的方式无条件执行。虽然这是未来的正确行为,但_cursor.LegacyCursorResult
对象现在将在本例中返回.keys()
正如它在1.3中所做的那样,同时也发出2.0弃用警告。这个_cursor.CursorResult
,当使用2.0风格的“未来”引擎时,将继续提高,就像现在一样。References: #6427
sql
[sql] [bug] [regression] ¶
修复了由刚在中进行的“Empty In”更改导致的回归 #6397 1.4.12“不在”用例中需要将表达式括在括号中,否则该条件将干扰其他过滤条件。
References: #6428
[sql] [bug] [regression] ¶
这个
TypeDecorator
类现在在带有缓存的sql编译中使用时将发出警告,除非.cache_ok
标志设置为True
或False
。一个新的类级属性TypeDecorator.cache_ok
可以设置,如果设置为,将用作指示传递给对象的所有参数都可以安全用作缓存键True
,False
意味着他们不是。References: #6436
1.4.13
Released: May 3, 2021orm
[orm] [bug] [regression] ¶
修复了中的回归问题
selectinload
加载程序策略,在处理跨多个列联接的关系时(例如使用复合外键时),会导致它不正确地缓存其内部状态。然后,无效的高速缓存将导致其他不相关的加载器操作失败。References: #6410
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题
Query.filter_by()
如果主导实体是从所讨论的主实体派生的SQL函数或其他表达式,而不是该实体的简单实体或列,则不起作用。此外,改进了Select.filter_by()
总的来说,即使在非ORM上下文中也可以使用列表达式。References: #6414
[orm] [bug] [regression] ¶
修复了使用
selectinload()
和subqueryload()
加载两级深的路径会导致属性错误。References: #6419
[orm] [bug] [regression] ¶
修复了使用
noload()
与“动态”关系结合使用的加载器策略将导致属性错误,因为NoLoad策略将尝试将其自身应用于动态加载器。References: #6420
engine
[engine] [bug] [regression] ¶
对象中意外移除的旧版事务行为已还原。
Connection
因为在以前的版本中从未将其作为已知用例进行测试,因此在以前的版本中调用Connection.begin_nested()
方法在不存在任何事务时根本不创建保存点,而是启动一个外部事务,返回RootTransaction
对象,而不是NestedTransaction
对象。这RootTransaction
然后,在提交时将在数据库连接上发出真正的COMMIT。以前,在自动开始事务但不提交事务的所有情况下都存在2.0样式的行为,这是一种行为更改。在使用 2.0 style 对象,则该行为与以前的1.4版本不同;调用
Connection.begin_nested()
将“自动开始”外部事务(如果尚未出现),然后按照指示发出一个保存点,返回NestedTransaction
对象。外部事务通过调用Connection.commit()
,就像“现收现付”式的用法一样。在非“将来”模式下,当恢复旧行为时,它还发出2.0弃用警告,因为这是遗留行为。
References: #6408
asyncio
[asyncio] [bug] [regression] ¶
修复了由引入的回归 #6337 这将创建一个
asyncio.Lock
当在启动任何异步CIO循环之前实例化异步引擎时,其可能被附加到错误的循环,从而在某些情况下尝试使用引擎时导致异步CIO错误消息。References: #6409
postgresql
[postgresql] [usecase] ¶
为PostgreSQL添加对pg8000方言的服务器端游标的支持。这允许使用
Connection.execution_options.stream_results
选项。References: #6198
1.4.12
Released: April 29, 2021orm
[orm] [bug] ¶
已修复中的问题
Session.bulk_save_objects()
当与持久对象一起使用时,持久对象将无法跟踪主键列名与属性名不同的映射的主键。This change is also backported to: 1.3.25
References: #6392
[orm] [bug] [caching] [regression] ¶
修复了关键回归,在这种情况下,SQL缓存系统中使用的绑定参数跟踪可能无法跟踪所有参数,因为在使用类继承等功能的ORM相关查询中使用了包含参数的相同SQL表达式,然后将其嵌入到封闭表达式中,该表达式将多次使用相同的表达式(如UNION)。ORM将单独复制单个SELECT语句,作为使用类继承进行编译的一部分,然后嵌入到封闭语句中的类继承将无法容纳所有参数。跟踪此条件的逻辑已调整为适用于参数的多个副本。
References: #6391
[orm] [bug] ¶
修复了两个影响最大的不同问题
hybrid_property
,它将在常见的错误配置场景中发挥作用,这些场景在1.3中被悄悄忽略,现在在1.4中失败,其中“表达式”实现将返回非ClauseElement
例如布尔值。对于这两个问题,1.3的行为是静默忽略错误配置,并最终尝试将值解释为SQL表达式,这将导致不正确的查询。修复了有关属性系统与HIXED_PROPERTY的交互的问题,如果
__clause_element__()
方法返回非 -ClauseElement
对象,则为内部AttributeError
将导致该属性返回expression
函数,因为属性错误针对的是名称.expression
它将调用__getattr__()
方法作为后备。这一点现在明确提出。在1.3中,非 -ClauseElement
是直接返回的。修复了SQL参数强制系统中的问题,在对象未被强制为绑定值的情况下,如果对象完全不是SQLAlChemy对象(如Python函数),则将错误类型的对象传递给期望列表达式的方法将失败。再说一次,1.3没有一个全面的论据强制制度,所以这个案件也会默默地过去。
References: #6350
[orm] [bug] ¶
修复了使用
Select
作为ORM上下文中的子查询,将修改Select
以禁用该对象上紧急加载,这将导致相同的Select
如果随后在顶级执行上下文中重新使用它,则不会立即加载。References: #6378
[orm] [bug] [regression] ¶
修复了新的 autobegin 在现有持久对象具有属性更改的情况下,行为无法“自动开始”,这将影响
Session.rollback()
因为没有创建要回滚的快照。“Attribute Modify”机制已经更新,以确保“自动开始”(不执行任何数据库工作)在持久属性以与以下情况相同的方式更改时发生Session.add()
被称为。这是一种回归,因为在1.3中,Rollback()方法总是有事务要回滚,并且每次都会过期。[orm] [bug] [regression] ¶
修复了ORM中的回归问题,在ORM中,使用混合属性指示来自不同实体的表达式会混淆ORM中的列标签逻辑,并尝试从该其他类派生混合的名称,从而导致属性错误。混合属性的所属类现在与名称一起被跟踪。
References: #6386
[orm] [bug] [regression] ¶
修复了HYDIXED_PROPERTY中的回归问题,其中针对SQL函数的混合将生成
AttributeError
当尝试为.c
在某些情况下是子查询的集合;除其他情况外,这会影响其在类似的情况下的使用Query.count()
。References: #6401
[orm] [bug] [dataclasses] ¶
调整了对数据类的声明性扫描,以便
declared_attr()
建立在混合中,当使用新形式将其放在dataclasses.field()
构造,而实际上不是类上的描述符属性,正确地适应了当要映射的目标类是已映射的现有映射类的子类的情况declared_attr()
,因此不应重新应用于此类。References: #6346
[orm] [bug] ¶
修复了的问题(1.4中已弃用)
ForeignKeyConstraint.copy()
方法调用时导致错误的schema
论点。References: #6353
engine
[engine] [bug] ¶
修复了使用显式
Sequence
对象将产生不一致的“内联”行为。Insert
包含多值短语的构造;第一个序列将是内联的,但随后的序列将是“预执行”的,从而导致不一致的序列排序。序列表达式现在完全内联。References: #6361
sql
[sql] [bug] ¶
修改了“Empty IN”表达式,使其不再依赖于使用子查询,因为这会导致一些兼容性和性能问题。针对选定数据库的新方法利用返回NULL的IN表达式与附加AND或OR的常用“1!=1”或“1=1”表达式相结合的优势。该表达式现在是除SQLite之外的所有后端的默认表达式,SQLite的旧版本仍然存在一些关于元组“IN”的兼容性问题。
第三方方言仍然可以通过实现新的编译器方法来覆盖“空集”表达式的呈现方式
def visit_empty_set_op_expr(self, type_, expand_op)
,它优先于现有的def visit_empty_set_expr(self, element_types)
它仍然在原地不动。[sql] [bug] [regression] ¶
修复了以下情况下的回归问题:使用
text()
在的COLUMNS子句内构造Select
构造,使用literal_column()
构造,但是会阻止像这样的构造union()
无法正常工作。其他用例(如构造子查询序列)继续与以前版本中相同的工作方式,在以前的版本中,text()
构造从导出列的集合中悄悄省略。还修复了ORM中类似的用法。References: #6343
[sql] [bug] [regression] ¶
修复了涉及遗留方法的回归问题,例如
Select.append_column()
其中内部断言将失败。References: #6261
[sql] [bug] [regression] ¶
修复了由以下原因导致的回归 #5395 调回检查中的序列的位置
select()
现在,在对映射类执行2.0样式的查询时导致失败,该映射类恰好也具有__iter__()
方法。对支票进行了更多调整,以适应此功能以及其他一些有趣的功能__iter__()
场景。References: #6300
schema
[schema] [bug] [mariadb] [mysql] [oracle] [postgresql] ¶
确保MySQL和MariaDB方言忽略
Identity
在呈现AUTO_INCREMENT
CREATE TABLE中的关键字。Oracle和PostgreSQL编译器已更新为不渲染
Identity
如果数据库版本不支持它(Oracle<12和PostgreSQL<10)。以前,它是与数据库版本无关地呈现的。References: #6338
postgresql
[postgresql] [bug] ¶
修复了非常老的问题,其中
Enum
DataType将不会继承MetaData.schema
属性的参数MetaData
对象传递给Enum
使用Enum.metadata
。References: #6373
sqlite
[sqlite] [usecase] ¶
默认为使用
SingletonThreadPool
用于使用URI文件名创建的内存中SQLite数据库。以前使用的默认池是NullPool
那就是在多个引擎之间共享同一数据库。References: #6379
mssql
[mssql] [bug] [schema] ¶
添加
TypeEngine.as_generic()
支持sqlalchemy.dialects.mysql.BIT
列,将它们映射到Boolean
。References: #6345
[mssql] [bug] [regression] ¶
修复了由以下原因导致的回归 #6306 它增加了对以下各项的支持
DateTime(timezone=True)
在这种情况下,pyodbc驱动程序在插入到时区原始日期时间列时隐式删除时区感知日期中的tzinfo的行为丢失,导致在将时区感知日期时间对象插入时区本机数据库列时导致SQL Server错误。References: #6366
1.4.11
Released: April 21, 2021orm declarative
[orm] [declarative] [bug] [regression] ¶
修复了支持Python数据类的最新更改会无意中导致ORM映射类无法成功重写
__new__()
方法。References: #6331
engine
[engine] [bug] [regression] ¶
修复了由中的更改导致的临界回归 #5497 其中连接池“init”阶段不再出现在互斥隔离中,从而允许其他线程继续使用未初始化的方言,这可能会影响SQL语句的编译。
References: #6337
1.4.10
Released: April 20, 2021orm
[orm] [usecase] ¶
改变了一些修复的行为 #6232 其中
immediateload
加载器策略不再进入递归循环;修改的是来自A->bs->B的紧急加载(joinedload、selectinload或subqueryload),然后声明immediateload
对于简单的多音字母B->a->A,身份映射中的B->A将填充B->A,以便在加载A/A.bs的集合时回填此属性。这允许对象在分离时起作用。[orm] [bug] ¶
修复了新版本中的错误
with_loader_criteria()
将Mixin类与declared_attr()
在首次初始化lambda可调用对象时,在自定义lambda内部访问的属性上将发出有关使用未映射的声明attr的警告。现在,对此lambda初始化步骤使用特殊检测可防止此警告。References: #6320
[orm] [bug] [regression] ¶
修复了中添加的“刷新时立即加载程序”功能导致的额外回归 #1763 历史上刷新操作将设置在何处
populate_existing
,现在当autoflush为false时,它会覆盖急切加载的对象上挂起的更改。对于这种情况,PUPATE_EXISTING标志已关闭,并使用更具体的方法来确保刷新正确的属性。References: #6326
[orm] [bug] [result] ¶
修复了使用2.0样式执行时阻止使用
Result.scalar_one()
或Result.scalar_one_or_none()
打完电话后Result.unique()
对于ORM在任何情况下都返回单个元素行的情况。References: #6299
sql
[sql] [bug] ¶
修复了SQL编译器中的问题,其中为
Values
如果在CTE
影响支持值+CTES并使用位置参数(特别是SQL Server以及异步cpg)的数据库驱动程序。该修复程序还修复了对编译器标志的支持,例如literal_binds
。References: #6327
[sql] [bug] ¶
修复并固化了有关自定义函数和其他任意表达式构造的问题,这些构造在SQLAlChemy的列标签机制中将寻求使用
str(obj)
获取字符串表示形式以用作.c
子查询的集合。这是一种非常遗留的行为,性能很差,会导致许多问题,因此已修改为不再执行任何编译,方法是在FunctionElement
来处理这种情况,因为SQL函数是它开始使用的唯一用例。此行为的效果是,没有可派生名称的未标记列表达式将被赋予以前缀开始的任意标签"_no_label"
在.c
子查询的集合;它们以前要么表示为该表达式的泛型字符串,要么表示为内部符号。References: #6256
schema
[schema] [bug] ¶
修复了以下情况下的问题
next_value()
不是从对应的Sequence
,而是硬编码为Integer
。现在使用特定的数字类型。References: #6287
mypy
[mypy] [bug] ¶
修复了mypy插件无法正确解释显式
Mapped
注释与relationship()
即通过字符串名引用类;正确的注释将降级为不太具体的注释,从而导致键入错误。References: #6255
mssql
[mssql] [usecase] ¶
这个
DateTime.timezone
参数(当设置为时)True
现在将利用DATETIMEOFFSET
用于发出DDL时使用SQL Server的列类型,而不是DATETIME
在那里,旗帜被悄悄地忽略了。References: #6306
misc
1.4.9
Released: April 17, 2021orm
[orm] [usecase] ¶
已建立对以下方面的支持
synoynm()
结合混合属性,完整地建立了关联代理,包括可以建立链接到这些完全工作构造的同义词。这是以前半显式禁止的行为,但是,由于它不是在所有情况下都会失败,因此添加了对Assoc代理和混合的显式支持。References: #6267
[orm] [bug] [performance] [regression] [sql] ¶
修复了一个严重的性能问题,其中遍历
select()
构造将遍历所表示的From子句的重复乘积,因为它们都是由COLUMNS子句中的COLUMNS引用的;对于具有许多列的一系列嵌套子查询,这可能会导致较大的延迟和显着的内存增长。包括ORM在内的各种SQL和ORM函数都使用此遍历Session
当它被配置为“每绑定表”时,虽然这不是一个常见的用例,但似乎是Flask-SQLAlChemy硬编码使用的,所以这个问题会影响Flask-SQLAlChemy用户。遍历已经修复,统一了FROM子句,这实际上是1.4之前的体系结构隐式发生的情况。References: #6304
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题:映射到
synonym()
无法在列加载器选项中使用,例如load_only()
。References: #6272
sql
postgresql
[postgresql] [bug] [regression] [sql] ¶
修复了默认和PostgreSQL编译器中的参数错误,该错误会干扰UPDATE..FROM或DELETE..FROM..USING语句,该语句随后作为CTE从中选择。
References: #6303
1.4.8
Released: April 15, 2021orm
[orm] [bug] [regression] ¶
修复了涉及
with_expression()
加载器选项,其中给定的SQL表达式不会被正确视为缓存键的一部分。此外,修复了涉及相应
query_expression()
功能。虽然从技术上讲,1.3中也存在该缺陷,但直到1.4才暴露出来。的“Default Expr”值null()
将在不需要时呈现,此外,当ORM重写语句时(例如使用联接的紧急加载时)也不能正确调整。该修复确保了“单例”表达式,如NULL
和true
不“适应”引用ORM语句中的列,并且还确保query_expression()
如果没有默认表达式,则不会在语句中呈现with_expression()
没有用过。References: #6259
[orm] [bug] ¶
修复了的新功能中的问题
Session.refresh()
推荐人 #1763 其中急切加载的关系也会被刷新,其中lazy="raise"
和lazy="raise_on_sql"
加载器策略会干扰immediateload()
加载器策略,因此破坏了使用selectinload()
,subqueryload()
也是。References: #6252
engine
[engine] [bug] ¶
这个
Dialect.has_table()
方法现在会在向其传递非连接时引发信息性异常,因为这种不正确的行为似乎很常见。此方法不适用于方言以外的外部使用。请使用Inspector.has_table()
方法或为了与较旧的SQLAlChemy版本交叉兼容,Engine.has_table()
方法。
sql
[sql] [feature] ¶
返回的元组
CursorResult.inserted_primary_key
现在是一个Row
对象,该对象的命名元组接口位于现有的元组接口之上。References: #3314
[sql] [bug] [regression] ¶
修复了以下情况下的回归问题
BindParameter
如果对象是从内部克隆操作或从PICLE操作复制的,并且参数名称包含空格或其他特殊字符,则该对象将无法正确呈现IN表达式(即使用1.4中的“编译后”功能)。References: #6249
[sql] [bug] [regression] [sqlite] ¶
修复了某些后端(包括SQLite)不支持引入INSERT语法“INSERT.VALUES(DEFAULT)”的问题,这些后端支持“INSERT..默认值”。现在,每种方言都单独支持或不支持这两种语法,例如,MySQL支持“Values(Default)”,但不支持“Default Values”。还启用了对Oracle的支持。
References: #6254
mypy
[mypy] [change] ¶
更新了Mypy插件,只使用语义分析器的公共插件接口。
[mypy] [bug] ¶
修改了以下项的修复
OrderingList
从1.4.7版开始,该版本正在针对不正确的API进行测试。References: #6205
asyncio
[asyncio] [bug] ¶
修复了阻止设置
bind
对象的属性AsyncSession
设置为正确的值。References: #6220
mssql
[mssql] [bug] [regression] ¶
修复了与的相同区域中的附加回归 #6173 , #6184 ,在SQL Server中使用偏移量的值0和LIMIT将创建使用“top”的语句,正如1.3中的行为,但是由于缓存将无法相应地响应其他偏移量的值。如果“0”不是第一个,那就没问题了。对于修复,现在只有在完全省略偏移值的情况下才会发出“top”语法,也就是说,
Select.offset()
未使用。请注意,此更改现在要求,如果使用“with_ties”或“Percent”修饰符,则语句不能指定偏移量为零,现在需要完全省略它。References: #6265
1.4.7
Released: April 9, 2021orm
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题
subqueryload()
加载器策略将无法正确地容纳子选项,例如defer()
选项,如果子查询加载的“路径”超过一级深。References: #6221
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题
merge_frozen_result()
由dogpile.caging示例依赖的函数未包含在测试中,并且由于内部参数不正确而开始失败。References: #6211
[orm] [bug] [regression] ¶
修复了关键回归,其中
Session
在没有现有事务的情况下发生刷新时,可能无法“自动开始”新事务,隐式地将Session
进入提交事务的遗留自动提交模式。这个Session
除了修复刷新问题外,现在还提供了一项检查,可以防止这种情况发生。此外,还缩减了作为以下项的一部分所做的更改的一部分 #5226 ,它可以在取消过期操作期间运行自动刷新,以便在发生以下情况时不实际执行此操作:
Session
使用旧版Session.autocommit
模式,因为这会在刷新操作中导致提交。References: #6233
[orm] [bug] [regression] ¶
修正了ORM编译方案假定混合属性的函数名称与属性名称相同的回归问题
AttributeError
当它尝试确定结果元组中每个元素的正确名称时,将引发。1.3中存在类似的问题,但只影响元组行的名称。此处的修复添加了一项检查,检查混合函数的函数名称是否确实存在于__dict__
类或其超类的名称;否则,混合将被认为是“未命名的”,ORM结果元组将使用基础表达式的命名方案。References: #6215
[orm] [bug] [regression] ¶
修复了作为的一部分添加的新功能导致的严重回归 #1763 ,则在未到期操作时调用急用加载器。新特性将“立即加载”急切加载程序策略用作集合加载策略的替身,与其他“后加载”策略不同,该策略不支持相互依赖的关系之间的递归调用,从而导致递归溢出错误。
References: #6232
engine
[engine] [bug] [regression] ¶
修复了
Row
对象(当对其使用字典访问时),这意味着通过dict(row)
或使用字符串或其他对象(如row["some_key"]
与字典一样工作,而不是引发TypeError
与元组的情况一样,无论C扩展是否到位。对于“非将来”的情况,它最初应该发出2.0弃用警告,方法是使用LegacyRow
,并将募集TypeError
为了“未来”Row
班级。但是,C版本的Row
没能提出这个问题TypeError
,而且让事情变得更复杂的是,Session.execute()
方法现在返回Row
在所有情况下都要保持与ORM结果用例的一致性,所以没有安装C扩展的用户在这一种情况下会看到现有1.4之前的样式代码的不同行为。因此,为了软化整体升级方案,因为大多数用户都没有接触到更严格的
Row
直到1.4.6,LegacyRow
和Row
两者都提供字符串键访问,并支持dict(row)
,在所有情况下都会在以下情况下发出2.0弃用警告SQLALCHEMY_WARN_20
已启用。这个Row
对象仍然使用类似于元组的行为__contains__
,这可能是唯一值得注意的行为变化,与LegacyRow
,而不是删除字典样式的方法values()
和items()
。References: #6218
sql
[sql] [bug] [regression] ¶
增强了用于
ColumnOperators.in_()
如果左侧没有设置任何显式类型,则从右侧元素列表推断表达式类型的操作。这允许表达式支持串化等操作。在1.3中,“扩展”不会自动用于ColumnOperators.in_()
表达式,所以从这个意义上说,这个变化修复了行为回归。References: #6222
[sql] [bug] ¶
修复了“stringify”编译器,以支持“multirow”INSERT语句的基本字符串化,即VALUES关键字后面有多个元组的语句。
schema
[schema] [bug] [regression] ¶
修复了在以下情况下使用令牌的回归:
Connection.execution_options.schema_translate_map
包含特殊字符(如大括号)的字典将无法正确替换。使用方括号字符[]
现在显式禁止,因为它们在当前实现中用作分隔符。References: #6216
mypy
[mypy] [bug] ¶
修复了Mypy插件中的问题,即插件无法为不直接从其派生的子类的列推断正确的类型
TypeEngine
,尤其是TypeDecorator
和UserDefinedType
。
misc
[change] [tests] ¶
将新标志添加到
DefaultDialect
被叫supports_schemas
;第三方方言可以将此标志设置为False
在为第三方方言运行测试套件时禁用SQLAlChemy的架构级测试。
1.4.6
Released: April 6, 2021orm
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题:不推荐使用
Query.join()
,传递一系列要联接的实体,而不在单个Query.join()
调用时,将无法正常运行。References: #6203
[orm] [bug] [regression] ¶
修复了关键回归,其中
Query.yield_per()
方法将在ORM中设置内部Result
为了一次产生块,但是使用了新的Result.unique()
方法,该方法在整个结果中是唯一的。这将导致丢失行,因为ORM正在使用id(obj)
作为唯一函数,这导致新对象的标识符重复,因为已经看到的对象被垃圾收集。1.3在这里的行为是在每个块上“唯一”,当结果是以块为单位产生时,实际上并不会产生“唯一”的结果。作为Query.yield_per()
方法已显式禁用,这是“唯一”功能的主要原理,但“唯一”功能现在完全关闭,如果出现以下情况,则“唯一”功能将被完全关闭。Query.yield_per()
是使用的。此回归仅适用于旧版
Query
对象;在使用 2.0 style 执行时,不会自动应用“唯一”。以防止该问题因显式使用Result.unique()
现在,如果行是从“唯一的”ORM级别读取的,则会引发错误Result
如果有 yield per API也在使用中,因为yield_per
是允许任意数量的行,如果不增加条目数量以适应完整的结果大小,这些行在内存中就不能是唯一的。References: #6206
sql
[sql] [bug] [mssql] [oracle] [regression] ¶
修复了与的相同区域中的进一步回归 #6173 在1.4.5中发布,其中,如果在语句中的多个位置呈现相同的参数,则将无法正确处理“PostCompile”参数(也是最通常用于Oracle和SQL Server中的限制/偏移渲染的参数)。
References: #6202
[sql] [bug] ¶
执行
Subquery
使用Connection.execute()
已弃用,并将发出弃用警告;此用例是一个应该从1.4中删除的疏忽。该操作现在将执行基础Select
对象,以实现向后兼容性。类似地,CTE
类也不适合执行。在1.3中,尝试执行CTE将导致执行无效的“空白”SQL语句;由于此用例不起作用,因此现在引发ObjectNotExecutableError
。在此之前,1.4试图将CTE作为语句执行,但它只是不稳定地工作。References: #6204
schema
[schema] [bug] ¶
这个
Table
对象现在如果在实例化时没有至少传递Table.name
和Table.metadata
位置论据。以前,如果将这些作为关键字参数传递,对象将无法正确初始化。This change is also backported to: 1.3.25
References: #6135
mypy
[mypy] [bug] ¶
应用了一系列重构和修复来适应Mypy跨多个文件的“增量”模式,这在以前是没有考虑到的。在这种模式下,Mypy插件必须适应在其他文件中表达的Python数据类型,这些文件中包含的信息比直接运行时要少。
另外,一位新的装饰师
declarative_mixin()
被添加,这是Mypy插件能够明确标识声明性混合类所必需的,否则不会在特定的Python文件中使用。参见
References: #6147
[mypy] [bug] ¶
修正了Mypy插件无法解释关系的“COLLECTION_CLASS”(如果它是一个可调用的而不是一个类)的问题。还改进了面向集合的关系的类型匹配和错误报告。
References: #6205
asyncio
[asyncio] [usecase] [postgresql] ¶
已添加访问器
.sqlstate
和同义词.pgcode
发送到.orig
由异步DBAPI适配器引发的SQLAlChemy异常类的属性,即包装在异步cpg库本身引发的异常对象之上、但低于SQLAlChemy方言级别的中间异常对象。References: #6199
1.4.5
Released: April 2, 2021orm
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题
joinedload()
加载器策略不会成功地将加载加入到映射到CTE
构造。References: #6172
[orm] [bug] [regression] ¶
已缩小添加到中的警告消息 #5171 在继承方案中不警告列重叠,在继承方案中,特定关系是子类的本地关系,因此不表示重叠。
References: #6171
sql
[sql] [bug] [postgresql] ¶
修复了新版本中的错误
FunctionElement.render_derived()
在别名SQL中显式呈现的列名不会对区分大小写的名称和其他非字母数字名称应用正确引号的功能。References: #6183
[sql] [bug] [regression] ¶
修复了使用
Operators.in_()
方法,并使用Select
对象对非表绑定列执行的操作将产生AttributeError
,或者更一般地使用ScalarSelect
如果二进制表达式中没有数据类型,则会产生无效状态。References: #6181
[sql] [bug] ¶
将新标志添加到
Dialect
调用的类Dialect.supports_statement_cache
。此标志现在需要直接出现在方言类上,以便SQLAlChemy的 query cache 才能对那一种方言生效。其基本原理是基于发现的问题,例如 #6173 揭示来自编译语句的硬编码文字值的方言(通常是用于限制/偏移的数字参数)将与缓存不兼容,直到这些方言被修改为仅使用语句中存在的参数。对于没有应用此标志的第三方方言,SQL日志记录将显示消息“方言不支持缓存”,表明一旦在编译阶段验证没有呈现每个语句的文字值,该方言就应该寻求应用此标志。参见
References: #6184
schema
[schema] [bug] ¶
引入一个新参数
Enum.omit_aliases
在……里面Enum
键入使用Pep435枚举时允许过滤别名。以前版本的SQLAlChemy在所有情况下都保留别名,创建具有附加状态的数据库枚举类型,这意味着它们在数据库中被视为不同的值。为了向后兼容,此标志缺省为False
在1.4系列中,但将切换到True
在未来的版本中。如果未指定此标志,并且传递的枚举包含别名,则会引发弃用警告。References: #6146
mypy
[mypy] [bug] ¶
修复了mypy插件中的问题,其中新添加了对
as_declarative()
需要更完整地添加DeclarativeMeta
类设置为mypy解释器的状态,以便它不会导致找不到名称错误;此外还改进了为插件设置全局名称的方式,包括Mapped
名字。References: #sqlalchemy/sqlalchemy2-stubs/#14
asyncio
postgresql
[postgresql] [bug] [regression] ¶
修复了由以下原因导致的回归 #6023 其中PostgreSQL CAST运算符应用于
ARRAY
时,如果数据类型也嵌入到Variant
适配器。此外,还修复了对在使用
Variant(ARRAY(some_schema_type))
。This change is also backported to: 1.3.25
References: #6182
[postgresql] [bug] ¶
修复了修复程序中的拼写错误 #6099 1.4.4发布,完全阻止此更改正常工作,即错误消息与pg8000实际发出的消息不匹配。
References: #6099
[postgresql] [bug] ¶
修复了PostgreSQL
PGInspector
对象生成时,Engine
,将会失败.get_enums()
,.get_view_names()
,.get_foreign_table_names()
和.get_table_oid()
当用于“未来”样式引擎而不是直接连接时。References: #6170
mysql
[mysql] [bug] [regression] ¶
修复了MySQL方言中的回归,在非常旧的MySQL 5.0和5.1版本上,用于检测表是否存在的反射查询将失败。
References: #6163
mssql
oracle
1.4.4
Released: March 30, 2021orm
[orm] [bug] ¶
修复了新版本中的关键问题
PropComparator.and_()
功能,其中发出辅助SELECT语句的加载器策略,如selectinload()
和lazyload()
将无法根据正在执行的当前语句(而不是缓存的语句)来适应用户定义的条件中的绑定参数,从而导致使用过时的绑定值。这还会为以下情况添加警告:使用
lazyload()
与PropComparator.and_()
尝试序列化;加载程序条件不能可靠地序列化和反序列化,在这种情况下应该使用急切加载。References: #6139
[orm] [bug] [regression] ¶
修复了缺少的方法
Session.get()
从ScopedSession
接口。References: #6144
engine
[engine] [usecase] ¶
修改了使用的上下文管理器
Transaction
这样,如果事务已经在挡路内手动回滚,则上下文管理器本身的结束不会发出“已分离”警告。这适用于常规事务、保存点事务和遗留“标记”事务。如果出现以下情况,则仍会发出警告.rollback()
方法被多次显式调用。References: #6155
[engine] [bug] ¶
修复CursorResult中异常处理方法的错误参数。
References: #6138
postgresql
[postgresql] [bug] [reflection] ¶
修复了PostgreSQL反射中的问题,其中表示“NOT NULL”的列将取代对应域的空性。
This change is also backported to: 1.3.24
References: #6161
[postgresql] [bug] ¶
修改了
is_disconnect()
pg8000方言的处理程序,该处理程序现在可容纳新的InterfaceError
由pg8000 1.19.0发射。哈姆迪·伯拉克提供的拉拉请求。References: #6099
misc
[misc] [bug] ¶
调整了
importlib_metadata
用于加载setuptools入口点的库,以适应某些过时的更改。
1.4.3
Released: March 25, 2021orm
[orm] [bug] ¶
修复了Python 2.7.5(CentOS 7上的默认值)无法导入sqlalChemy的错误,因为在此版本的Python上
exec "statement"
和exec("statement")
不要以同样的方式行事。兼容性exec_()
函数取而代之。References: #6069
[orm] [bug] ¶
修复了ORM查询将相关子查询与
column_property()
在以下情况下将无法正确关联到封闭的子查询或CTESelect.correlate_except()
在属性中用于控制相关性,以防子查询包含的可选项与相关子查询中打算不相关的可选项相同。References: #6060
[orm] [bug] ¶
修复了新的“与条件的关系”功能与使用新的“lambda SQL”功能的功能(包括selectinload和lazyload等加载器策略)在更复杂的场景(如多态加载)结合使用时可能失败的错误。
References: #6131
[orm] [bug] ¶
修复了支架,以便
ClauseElement.params()
方法可以与Select
对象,该对象包括跨ORM关系结构的联接,这是1.4中的新特性。References: #6124
[orm] [bug] ¶
修复了关系加载器机制在内部生成“在2.0中删除”警告的问题。
References: #6115
orm declarative
[orm] [declarative] [bug] [regression] ¶
修复了以下情况下的回归问题
.metadata
属性将不会被遵守,从而打破了按类层次结构的用例MetaData
用于抽象声明性类和混合。参见
References: #6128
engine
[engine] [bug] [regression] ¶
恢复了
ResultProxy
名称返回到sqlalchemy.engine
命名空间。此名称指的是LegacyCursorResult
对象。References: #6119
schema
[schema] [bug] ¶
调整了发出DROP语句的逻辑
Sequence
对象删除多个表,以便所有Sequence
对象将在所有表之后删除,即使给定的Sequence
仅与Table
对象,而不是直接到整体MetaData
对象。用例支持相同的功能Sequence
与多个关联Table
一次一次。This change is also backported to: 1.3.24
References: #6071
mypy
[mypy] [bug] ¶
添加了对Mypy扩展的支持,以正确解释使用
as_declarative()
函数以及registry.as_declarative_base()
方法。[mypy] [bug] ¶
修复了Mypy插件中的错误,其中Python类型检测
Boolean
列类型将产生异常;另外实现了对Enum
,包括检测基于字符串的枚举与使用Pythonenum.Enum
。References: #6109
postgresql
[postgresql] [bug] [types] ¶
调整了mental copg2方言,以便为包含数组元素的绑定参数发出显式PostgreSQL样式的强制转换。这允许所有数据类型在数组中正常运行。异步方言已经在最后一条语句中生成了这些内部强制转换。这还包括支持阵列切片更新以及特定于PostgreSQL的
ARRAY.contains()
方法。This change is also backported to: 1.3.24
References: #6023
[postgresql] [bug] [reflection] ¶
修复了PostgreSQL中具有混合大小写名称的表中标识列的反射。
References: #6129
sqlite
[sqlite] [feature] [asyncio] ¶
添加了对用于SQLAlChemical异步扩展的aiosqlite数据库驱动程序的支持。
参见
References: #5920
[sqlite] [bug] [regression] ¶
修好了
pysqlcipher
在1.4版本中,增加了TEST+CI支持,以保持司机在工作状态下的工作状态。该方言现在导入sqlcipher3
在回退到之前,默认情况下是Python 3的模块pysqlcipher3
它现在被记录为未维护。参见
References: #5848
1.4.2
Released: March 19, 2021orm
[orm] [usecase] [dataclasses] ¶
添加了对
declared_attr
对象在数据类字段的上下文中工作。参见
References: #6100
[orm] [bug] [dataclasses] ¶
修正了新的ORM数据类功能中的问题,如果数据类字段在dataclasses.field()对象中还包括“默认”键,则不会映射包含列或其他映射结构的抽象基或混合中的数据类字段。
References: #6093
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题
Query.selectable
访问器,它是Query.__clause_element__()
,被移走了,现在又恢复了。References: #6088
[orm] [bug] [regression] ¶
修复了回归问题,在这种情况下,如果查询本身正在对实体使用joinedload,并且joinedload急切加载过程也将包装在子查询中,则使用未命名的SQL表达式(如SQL函数)将引发列目标错误。
References: #6086
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题
Query.filter_by()
方法将无法定位正确的源实体,如果Query.join()
方法已针对没有任何种类的ON子句的实体使用。References: #6092
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题:SQL编译
Function
如果对象已被“注释”,则不能正常工作,这是ORM主要使用的内部记忆过程。特别是,它可能会影响ORM延迟加载,后者在1.4中更多地使用了此功能。References: #6095
[orm] [bug] ¶
修复了以下情况下的回归问题
ConcreteBase
当映射列名与鉴别器列名重叠时,将根本无法映射,从而产生断言错误。这里的用例在1.3中不能正常工作,因为多态联合将生成一个完全忽略鉴别器列的查询,同时发出重复的列警告。因为1.4的体系结构不能很容易地重现1.3的这种本质上被破坏的行为select()
级别时,用例现在会引发一条信息性错误消息,指示用户使用.ConcreteBase._concrete_discriminator_name
属性来解决冲突。要帮助进行此配置,请执行以下操作:.ConcreteBase._concrete_discriminator_name
只能放在子类将自动使用的基类上;以前情况并非如此。References: #6090
engine
[engine] [bug] [regression] ¶
已还原以下项的顶级导入
sqlalchemy.engine.reflection
。这确保了基地Inspector
类已正确注册,以便inspect()
适用于以其他方式不导入此包的第三方方言。
sql
[sql] [bug] [regression] ¶
修复了使用
func
因为Python名称列表需要是一个元组,所以SQL缓存系统无法缓存包括点分隔的包名。References: #6101
[sql] [bug] [regression] ¶
修复了
case()
构造,其中“字典”形式的参数规范如果按位置传递,而不是作为“whens”关键字参数传递,则无法正常工作。References: #6097
mypy
[mypy] [bug] ¶
修复了MyPy扩展中的问题,该问题在检测到
Column
如果给定的类型带有如下模块前缀sa.Integer()
。References: #sqlalchemy/sqlalchemy2-stubs/2
postgresql
1.4.1
Released: March 17, 2021orm
[orm] [bug] [regression] ¶
修复了生成核心表达式构造(如
select()
使用ORM实体会急于配置映射器,以努力保持与Query
对象,该对象必须执行此操作以支持许多与反向引用相关的遗留情况。但是,核心select()
构造也在映射器配置等中使用,这种急切配置在某种程度上更不方便,因此已对select()
以及其他核心构造(在缺少ORM加载类型的函数的情况下),例如Load
。更改将保持
Query
从而保持向后兼容性。但是,在使用select()
与ORM实体结合使用时,直到映射器配置时才显式放置在其中一个类上的“backref”将不可用,除非configure_mappers()
或者是较新的configure()
已经被召唤到其他地方了。更喜欢使用relationship.back_populates
对于没有紧急配置要求的更明确的关系配置。References: #6066
[orm] [bug] [regression] ¶
修复了关系延迟加载器中的关键回归,其中,如果映射器有配置更改(例如,映射器后期配置或按需配置时可能会发生更改),则用于获取相关多对一对象的SQL条件相对于加载器中的其他记忆结构可能会失效,从而产生与无的比较并不返回任何对象。非常感谢艾伦·哈姆利特帮助追踪到深夜。
References: #6055
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题
Query.exists()
属性的实体列表时,方法将无法创建表达式Query
是任意SQL列表达式。References: #6076
[orm] [bug] [regression] ¶
修复了调用
Query.count()
与诸如以下加载器选项相结合joinedload()
将无法忽略加载器选项。这是一种始终非常特定于Query.count()
方法;如果给定的Query
具有不适用于它返回的内容的选项。References: #6052
[orm] [bug] [regression] ¶
修复了中的回归问题
Session.identity_key()
包括该方法和相关方法未包含在任何单元测试中,以及该方法包含阻止其正常工作的拼写错误。References: #6067
orm declarative
[orm] [declarative] [bug] [regression] ¶
修复了包含名为“register”属性的用户映射类在使用时会导致与新的基于注册表的映射系统冲突的错误
DeclarativeMeta
。虽然该属性仍然可以在声明性基础上显式设置以供元类使用,但一旦找到它,它就被放在私有类变量下,这样它就不会与将来出于其他目的使用相同名称的子类冲突。References: #6054
engine
[engine] [bug] [regression] ¶
The Python
namedtuple()
has the behavior such that the namescount
andindex
will be served as tuple values if the named tuple includes those names; if they are absent, then their behavior as methods ofcollections.abc.Sequence
is maintained. Therefore theRow
andLegacyRow
classes have been fixed so that they work in this same way, maintaining the expected behavior for database rows that have columns named "index" or "count".References: #6074
mssql
[mssql] [bug] [regression] ¶
修复了启用了可用于pyodbc的新setinputsize()API的回归问题,在缺乏更准确的键入信息的情况下,这显然与pyodbc的fast_ecutemany()模式不兼容,到目前为止,该模式尚未完全实现或测试。pyodbc方言和连接器已修改,因此根本不使用setinputsize(),除非参数
use_setinputsizes
传递到该方言,例如通过create_engine()
,此时它的行为可以使用DialectEvents.do_setinputsizes()
胡克。参见
References: #6058
misc
[bug] [regression] ¶
向后添加
items
和values
至ColumnCollection
班级。回归是在添加对FROM子句中的重复列和票证#4753中的可选列的支持时引入的。References: #6068
1.4.0
Released: March 15, 2021orm
[orm] [bug] ¶
删除了声明PASSIVE_DELETES不适用于多对一关系的非常旧的警告。虽然很可能在许多情况下,将此参数放在多对一关系上并不是预期的结果,但在某些用例中,可能不允许在这种关系之后使用DELETE CASCADE。
This change is also backported to: 1.3.24
References: #5983
[orm] [bug] ¶
修复了以下问题:如果其中一个表具有不相关且无法解析的外键约束,则连接两个表的过程可能会失败
NoReferenceError
在联接进程内,但是可以绕过它以允许联接完成。在过程中测试异常重要性的逻辑将对将失败的构造进行假设。This change is also backported to: 1.3.24
References: #5952
[orm] [bug] ¶
修复了以下问题:
MutableComposite
由于复合属性的刷新处理程序将对象替换为可变扩展未处理的新对象,因此当父对象已加载时,构造可能会被置于无效状态,然后被后续查询覆盖。This change is also backported to: 1.3.24
References: #6001
[orm] [bug] ¶
修复了以下情况下的回归问题
relationship.query_class
参数不再对“动态”关系起作用。这个AppenderQuery
仍然依赖于传统Query
类;鼓励用户从使用“动态”关系迁移到使用with_parent()
取而代之的是。References: #5981
[orm] [bug] [regression] ¶
修复了以下情况下的回归问题
Query.join()
如果查询本身和联接目标针对的是Table
对象,而不是映射的类。这是一个更系统的问题的一部分,在这个问题中,传统的ORM查询编译器将不能从Query
如果生成的语句中没有ORM实体。References: #6003
[orm] [bug] [asyncio] ¶
的API
AsyncSession.delete()
现在是一个可等待的;此方法沿关系级联,这些关系必须以与AsyncSession.merge()
方法。References: #5998
[orm] [bug] ¶
现在,当刷新正在进行时,工作进程单元将完全关闭所有“lazy=‘raise’”行为。虽然UOW有时会在某些区域加载最终不需要的内容,但lazy=“raise”策略在这里没有什么帮助,因为用户通常对刷新过程没有太多控制或可见性。
References: #5984
engine
[engine] [bug] ¶
修复了在直接执行的用例中无法考虑“SCHEMA_TRANSLATE_MAP”功能的错误
DefaultGenerator
对象,如序列,其中包括当禁用IMPLICIT_RETURNING时,为了生成主键值而“预执行”它们的情况。This change is also backported to: 1.3.24
References: #5929
[engine] [bug] ¶
改进了引擎日志记录,以便在DBAPI驱动程序处于AUTOCOMMIT模式时记录回滚和提交。这些回滚/提交是库级的,在AUTOCOMMIT生效时没有任何影响,但是仍然值得记录,因为它们指示SQLAlChemy看到“事务”分界的位置。
References: #6002
[engine] [bug] [regression] ¶
修复了连接池的“重置代理”实际上没有被
Connection
当它被关闭时,也导致了有点浪费的双重回滚情况。引擎的较新体系结构已更新,因此在执行以下操作时将跳过连接池的“返回时重置”逻辑Connection
在将池返回到连接之前显式关闭事务。References: #6004
sql
[sql] [change] ¶
更改了
CTE
构造,以便返回表示内部SELECT语句的字符串(如果CTE
在封闭的SELECT上下文之外直接字符串化为;这与FromClause.alias()
和Select.subquery()
。以前,由于CTE通常在SELECT生成后放在SELECT之上,因此会返回一个空字符串,这在调试时通常会产生误导。[sql] [bug] ¶
修复了使用“format”或“pyformat”绑定参数样式的方言出现的“转义百分比”功能没有为
Operators.op()
和custom_op
构造,用于使用百分号的自定义运算符。现在,百分号将根据参数样式根据需要自动加倍。References: #6016
[sql] [bug] [regression] ¶
修复了未知数据类型的“不支持的编译错误”无法正确引发的回归问题。
References: #5979
[sql] [bug] [regression] ¶
修复了使用独立的
distinct()
以直接选择的形式使用,将无法通过列标识在结果集中定位,这就是ORM定位列的方式。在独立时distinct()
不面向直接选择(使用select.distinct()
对于常客来说SELECT DISTINCT..
),它以前以这种方式在一定程度上是可用的(但比方说,在子查询中不起作用)。针对一元表达式(如“DISTINCT<COL>”)的列已得到改进,因此此情况再次有效,并且进行了额外的改进,以便在子查询中使用此表单至少会生成有效的SQL,这与以前不同。此更改还增强了在中定位元素的能力
row._mapping
基于启用ORM的SELECT语句中的SQL表达式对象,包括该语句是否由调用connection.execute()
或session.execute()
。References: #6008
schema
[schema] [bug] [sqlite] ¶
修复了由以下项生成的检查约束的问题
Boolean
或Enum
在第一次编译后将无法正确呈现命名约定,原因是指定给约束的名称中的状态发生意外更改。该问题在0.9版本中首次引入,即对问题#3067的修复,该修复修订了当时采取的方法,该方法似乎比所需的更复杂。This change is also backported to: 1.3.24
References: #6007
[schema] [bug] ¶
修复/实现了对使用列名/键等作为约定一部分的主键约束命名约定的支持。具体地说,这包括
PrimaryKeyConstraint
对象,该对象自动与Table
将其名称更新为新的主键Column
对象先添加到表中,然后添加到约束中。现在适应与该约束构造过程相关的内部故障模式,包括不存在列、不存在名称或存在空白名称。This change is also backported to: 1.3.24
References: #5919
[schema] [bug] ¶
已弃用所有架构级
.copy()
方法,并重命名为_copy()
。这些不是标准的Python“copy()”方法,因为它们通常依赖于作为可选关键字参数传递给方法的特定上下文中的实例化。这个Table.tometadata()
方法是提供复制的公共APITable
对象。References: #5953
mypy
[mypy] [feature] ¶
以新插件的形式添加了对Mypy的基本和实验支持,该插件本身依赖于SQLAlChemy的新类型存根。该插件允许标准形式的声明性映射既与Mypy兼容,又为映射的类和实例提供类型支持。
参见
References: #4609
postgresql
[postgresql] [usecase] [asyncio] [mysql] ¶
添加了一个
asyncio.Lock()
在SQLAlChemy的模拟DBAPI游标(连接的本地)内,用于范围内的asyncpg和aiomysql方言cursor.execute()
和cursor.executemany()
方法。这样做的基本原理是防止在多个等待项中同时使用连接的情况下出现故障和损坏。虽然线程代码和非异步方言也可能出现这种用例,但我们预计这种使用在异步语言下会更常见,因为异步语言API鼓励使用这种语言。不过,对每个可等待并发使用不同的连接肯定更好,因为否则无法实现并发。
对于异步cpg方言,这是为了将调用之间的空格
prepare()
和fetch()
被阻止允许对连接的并发执行导致接口错误异常,并防止在启动新事务时出现争用情况。其他PostgreSQL DBAPI是连接级的ThreadSafe,因此这打算在服务器端游标之外提供类似的行为。对于aiomysql方言,互斥锁将提供安全性,以便语句执行和结果集提取这两个在连接级的不同步骤不会被同一连接上的并发执行破坏。
References: #5967
[postgresql] [bug] ¶
修复了使用
aggregate_order_by
在某些条件下会返回数组(NullType),从而影响结果对象正确返回数据的能力。This change is also backported to: 1.3.24
References: #5989
mssql
misc
[usecase] [ext] ¶
添加新参数
AutomapBase.prepare.reflection_options
允许通过MetaData.reflect()
选项,如only
或特定于方言的反射选项,如oracle_resolve_synonyms
。References: #5942
[bug] [ext] ¶
这个
sqlalchemy.ext.mutable
扩展现在使用InstanceState
与对象相关联,而不是与对象本身相关联。后一种方法要求对象是可哈希的,以便它可以位于WeakKeyDictionary
,这总体上违反了ORM的行为契约,即ORM映射对象不需要提供任何特定类型的__hash__()
方法,并且支持不可散列的对象。References: #6020
1.4.0b3
Released: February 15, 2021orm
[orm] [feature] ¶
中使用的ORM 2.0 style 通过将构造提供给,现在可以从UPDATE..RETINGING或INSERT..RETURNING语句返回的行中返回ORM对象
Select.from_statement()
在ORM上下文中。参见
[orm] [bug] ¶
修复了新的1.4/2.0样式ORM查询中的问题,其中语句级标签样式不会保留在结果行使用的键中;这已应用于核心/ORM列/会话与连接等的所有组合,因此语句到结果行的链接在所有情况下都是相同的。作为此更改的一部分,行中列表达式的标签已得到改进,即使在子查询中使用,也可以保留ORM属性的原始名称。
References: #5933
engine
[engine] [bug] [postgresql] ¶
继续进行作为以下内容的一部分所做的改进 #5653 为了进一步支持包含冒号、括号和问号的名称的绑定参数名(包括针对列名生成的绑定参数名),以及改进的测试支持,即使绑定参数名是从列名自动派生的,也应该没有问题,包括在mental copg2的“pyformat”样式中使用括号。
作为此更改的一部分,asyncpg DBAPI适配器使用的格式(SQLAlChemy的异步方言的本地格式)已从使用“qmark”参数样式更改为“format”,因为对于使用“format”样式的百分号(即双百分号)的名称,与使用“qmark”样式的问号(其中转义系统不是由PEP-249或Python定义的转义系统)的名称相比,存在内部支持的标准SQL字符串转义样式。在此更改中,asyncpg DBAPI适配器使用的格式已从使用“qmark”参数样式更改为“format”,因为内部支持的标准SQL字符串转义样式用于使用带有“format”样式的百分号(即双百分号)的名称。
参见
References: #5941
sql
[sql] [usecase] [postgresql] [sqlite] ¶
增强
set_
keyword ofOnConflictDoUpdate
to accept aColumnCollection
, such as the.c.
从Selectable
,或.excluded
上下文对象。References: #5939
[sql] [bug] ¶
修复了“笛卡尔积”断言不能正确适应表之间的联接的错误,这些表依赖于使用横向来从子查询连接到封闭上下文中的另一个子查询。
References: #5924
[sql] [bug] ¶
修复了1.4回归,其中
Function.in_()
方法不在测试范围内,并且在所有情况下都无法正常运行。References: #5934
[sql] [bug] ¶
修复了在将任意可迭代函数与
select()
在普通列表之外,函数不起作用。这里的向前/向后兼容性逻辑现在检查更大范围的传入“可迭代”类型,包括.c
集合可以直接传递。奥利弗·赖斯的请求问候。References: #5935
1.4.0b2
Released: February 3, 2021general
[general] [bug] ¶
修复了SQLite源文件的文档字符串中包含非ASCII字符但没有源代码编码的问题,该问题是在“INSERT..ON CONFLICATION”功能中引入的,在Python 2下会导致失败。
platform
[platform] [performance] ¶
与1.3版本相比,在导入时调整了一些与内部类生成相关的元素,这增加了导入库所花时间的显著延迟。现在时间比1.3慢20-30%,而不是200%。
References: #5681
orm
[orm] [usecase] ¶
已添加
ORMExecuteState.bind_mapper
和ORMExecuteState.all_mappers
访问者到ORMExecuteState
事件对象,以便处理程序可以响应目标映射器和/或映射的一个或多个ORM语句执行中涉及的类。[orm] [usecase] [asyncio] ¶
已添加
AsyncSession.scalar()
,AsyncSession.get()
以及对以下各项的支持sessionmaker.begin()
要使用作为异步上下文管理器工作,请执行以下操作AsyncSession
。还添加了AsyncSession.in_transaction()
访问者。[orm] [changed] ¶
映射器“配置”,它发生在
configure_mappers()
函数,现在被组织为以每个注册表为基础。例如,这允许配置某个声明性基内的映射器,但不允许配置也存在于存储器中的另一个基内的映射器。其目标是提供一种通过只为所需的映射器集运行“配置”进程来减少应用程序启动时间的方法。这还添加了registry.configure()
方法,该方法将仅为特定注册表中的本地映射器运行Configure。References: #5897
[orm] [bug] ¶
对于将映射类或字符串映射类名传递到的情况,添加了全面检查和信息性错误消息
relationship.secondary
。这是一个非常常见的错误,需要一个明确的信息。此外,还向类注册表解析添加了新规则,以便对于
relationship.secondary
参数时,如果映射的类及其表具有相同的字符串名称,则Table
在解析此参数时将优先考虑。在所有其他情况下,如果类和表共享相同的名称,则继续优先使用该类。This change is also backported to: 1.3.21
References: #5774
[orm] [bug] ¶
修复了涉及
restore_load_context
ORM事件选项,如InstanceEvents.load()
使得该标志不会被携带到在事件处理程序首次建立之后映射的子类。This change is also backported to: 1.3.21
References: #5737
[orm] [bug] [regression] ¶
已修复新版本中的问题
Session
类似于Connection
中执行SQL,则新的“自动开始”逻辑可能会跳转到重入(递归)状态。SessionEvents.after_transaction_create()
事件挂钩。References: #5845
[orm] [bug] [unitofwork] ¶
改进了工作单元拓扑排序系统,现在拓扑排序是基于输入集的排序确定的,输入集本身现在是在映射器级别排序的,因此受影响映射器的相同输入每次都应该在彼此不存在任何依赖的映射器/表之间产生相同的输出。这进一步降低了在多个不相关的表之间进行更新以生成行锁的刷新中可以观察到的死锁的可能性。
References: #5735
[orm] [bug] ¶
修正了回归,其中
Bundle.single_entity
标志将在Bundle
即使它没有设定。此外,此标志是遗留的,因为它只对Query
对象而不是2.0样式执行。当与新样式的执行一起使用时,将发出一个弃用警告。References: #5702
[orm] [bug] ¶
修复了在以下情况下创建
aliased
针对纯可选对象构造并包括名称将引发断言错误。References: #5750
[orm] [bug] ¶
与核心中的lambda标准系统的修复相关,在ORM中实现了对
with_loader_criteria()
功能以及SessionEvents.do_orm_execute()
事件处理程序,该事件处理程序通常与 [门票:5760] :修复了以下情况下的问题
with_loader_criteria()
如果给定实体或基在其降级类层次结构中包含非映射混合,则函数将失败 [门票:5766]这个
with_loader_criteria()
现在,对于ORM“刷新”操作,包括加载延迟或过期的列属性,以及对于如下显式操作,特性是无条件禁用的Session.refresh()
。这些加载必须基于主键标识,在这种情况下,附加条件永远不合适。 [门票:5762]添加了新属性
ORMExecuteState.is_column_load
以指示一个SessionEvents.do_orm_execute()
处理程序通知特定操作是主键定向的列属性加载,其中不应添加其他条件。这个with_loader_criteria()
函数在任何情况下都会忽略这些。 [门票:5761]修复了以下问题:
ORMExecuteState.is_relationship_load
对于许多惰性加载以及所有选择加载,属性设置都不正确。为了测试是否应该将选项添加到语句中,或者测试它们是否已经通过关系加载传播,该标志是必不可少的。 [门票:5764]
[orm] [bug] ¶
修复了1.4在以下情况下使用
Query.having()
与使用内部适配的SQL元素(在继承场景中常见)的查询结合使用时,会由于不正确的函数调用而失败。拉开请求,谢谢。References: #5781
[orm] [bug] ¶
修复了使用以下命令创建自定义可执行SQL结构的API的问题
sqlalchemy.ext.compiles
根据文档,已经运行多年的扩展将不再起作用,如果Executable, ClauseElement
被用作基类,如果想要使用Session.execute()
。此问题已解决,因此不需要额外的类。[orm] [bug] [regression] ¶
修复了ORM工作单元回归,其中错误的“ASSERT PRIMARY_KEY”语句干扰了主键生成序列,这些序列实际上并不认为表中的列使用真正的主键约束,而是使用
mapper.primary_key
将某些栏设置为“主要”。References: #5867
orm declarative
[orm] [declarative] [feature] ¶
向声明性添加了替代解析方案,该方案将从dataclasses.Field对象的“METADATA”字典中提取SQLAlChemy列或映射属性。这允许将完整的声明性映射与数据类字段组合在一起。
参见
References: #5745
engine
[engine] [feature] ¶
方言特有的结构,如
Insert.on_conflict_do_update()
现在可以在不需要指定显式方言对象的情况下进行字符串化。当需要时str()
,print()
,等等,现在有了内部的方向来调用他们适当的方言,而不是“默认”方言,它不知道如何将这些方言串起来。该方法还适用于通用模式级别的创建/删除,例如AddConstraint
,它将使它的stringify方言与其中的元素所表示的方言相适应,例如ExcludeConstraint
对象。[engine] [feature] ¶
添加了新的执行选项
Connection.execution_options.logging_token
。此选项将向由生成的日志消息添加额外的每条消息令牌Connection
因为它执行语句。此内标识不是记录器名称本身的一部分(该部分可能会使用现有的create_engine.logging_name
参数),因此适合于临时连接使用,而不会产生创建许多新记录器的副作用。该选项可以在的级别设置Connection
或Engine
。参见
References: #5911
[engine] [bug] [sqlite] ¶
修复了2.0“未来”版本中的错误
Engine
期间发出SQL的位置EngineEvents.begin()
由于AutoBegin,事件挂钩将导致重入(递归)条件,影响SQLite文档中允许保存点和可序列化隔离支持的配方等。References: #5845
[engine] [bug] [oracle] [postgresql] ¶
调整了cx_oracle、asyncpg和pg8000方言所依赖的“setinputsize”逻辑,以支持
TypeDecorator
这包括重写TypeDecorator.get_dbapi_type()
方法。[engine] [bug] ¶
将“future”关键字添加到
engine_from_config()
函数,以便值“true”和“false”在使用键时可以配置为“boolean”值,例如sqlalchemy.future = true
或sqlalchemy.future = false
.
sql
[sql] [feature] ¶
实现了对“表值函数”的支持,以及PostgreSQL支持的附加语法,这是最常被请求的特性之一。表值函数是返回值或行列表的SQL函数,流行于PostgreSQL中的JSON函数领域,其中“表值”通常被称为“记录”数据类型。Oracle和SQL Server也支持表值函数。
添加的功能包括:
这个
FunctionElement.table_valued()
从SQL函数创建表状可选对象的修饰符A
TableValuedAlias
将SQL函数呈现为命名表的构造支持PostgreSQL的特殊“派生列”语法,该语法包括列名,有时还包括数据类型,例如
json_to_recordset
函数,使用TableValuedAlias.render_derived()
方法。支持PostgreSQL的“具有顺序性”构造,使用
FunctionElement.table_valued.with_ordinality
参数支持从SQL函数中选择列值标量,这是PostgreSQL和Oracle支持的语法,通过
FunctionElement.column_valued()
方法方法从表值表达式中选择单个列,而不使用FROM子句。
FunctionElement.scalar_table_valued()
方法。
参见
表值函数 - in the SQLAlchemy 1.4/2.0教程
References: #3566
[sql] [usecase] ¶
多次调用“返回”,例如。
Insert.returning()
,现在可能被链接以向RETURNING子句添加新列。References: #5695
[sql] [usecase] ¶
已添加
Select.outerjoin_from()
补足的方法Select.join_from()
。[sql] [usecase] ¶
调整了的“cripal_binds”功能
Compiler
为绑定参数呈现NULL,该绑定参数具有None
作为值,显式传递或省略。删除前面的错误消息“BIND PARAMETER WITH A RENDERABLE VALUE”,并且缺少或None
值现在在所有情况下都将呈现NULL。以前,由于内部重构,DML语句开始呈现NULL,但现在不是测试覆盖范围的显式部分。虽然没有引发错误,但当上下文在列比较的上下文中,并且操作符不是“is”/“is not”时,会发出警告,说明从SQL的角度来看,这通常没有什么用处。
References: #5888
[sql] [bug] ¶
已修复新版本中的问题
Select.join()
方法中,从当前联接链接没有查看正确的状态,从而导致类似于“from a join b,b join c”这样的表达式,而不是“from a join b>join c”。References: #5858
[sql] [bug] ¶
将普通字符串传递给时,在“SQLALCHEMY_WARN_20”模式下会发出弃用警告
Session.execute()
。References: #5754
[sql] [bug] [orm] ¶
中介绍的对“lambda SQL”特性的各种修复 使用Lambdas为语句生成添加显著的速度增益 都是基于用户反馈实现的,重点是它在
with_loader_criteria()
使用最显著的功能 [门票:5760] :修复了在lambda的闭包变量中引用的布尔值True/False会导致失败的问题 [门票:5763]
修复了嵌入到lambda中的Python函数产生绑定值的非工作检测;这种情况可能不受支持,因此会引发信息性错误,其中函数应在lambda自身外部调用。添加了新的文档以进一步详细说明此行为。 [门票:5770]
在默认情况下,lambda系统现在完全拒绝在lambda的闭包变量中使用非SQL元素,其中错误建议两种选择,一种是显式忽略不是SQL参数的闭包变量,另一种是根据散列值指定一组特定的值作为缓存键的一部分。这在很大程度上防止了lambda系统假定lambda闭包中的任意对象适合缓存,同时在默认情况下也拒绝忽略它们,从而防止了它们的状态可能不恒定并对生成的SQL构造产生影响的情况。错误消息是全面的,添加了新的文档以进一步详细说明此行为。 [门票:5765]
修复了对边缘情况的支持,其中
in_()
针对SQL元素列表(如literal()
将不能正确地容纳物体。 [门票:5768]
[sql] [bug] [mysql] [postgresql] [sqlite] ¶
现在,将为选定的一组DML方法(当前为的所有部分)引发一条信息性错误消息
Insert
构造),如果第二次调用它们,这将隐式地取消以前的设置。更改的方法包括:on_conflict_do_update
,on_conflict_do_nothing
(SQLite)、on_conflict_do_update
,on_conflict_do_nothing
(PostgreSQL)、on_duplicate_key_update
(MySQL)References: #5169
[sql] [bug] ¶
已修复新版本中的问题
Values
构造,其中传递对象元组将回退到逐值类型检测,而不是使用Column
直接传递给Values
这告诉SQLAlChemy预期的类型是什么。这将导致枚举和Numpy字符串等对象出现问题,因为给定了预期的类型,因此这些对象实际上不是必需的。References: #5785
[sql] [bug] ¶
固定问题,其中
RemovedIn20Warning
当.bind
属性是在对象的内部访问的,尤其是在字符串化SQL构造时。References: #5717
[sql] [bug] ¶
正确渲染
cycle=False
和order=False
作为NO CYCLE
和NO ORDER
在……里面Sequence
和Identity
对象。References: #5722
[sql] ¶
替换
Query.with_labels()
和GenerativeSelect.apply_labels()
使用显式的getter和setterGenerativeSelect.get_label_style()
和GenerativeSelect.set_label_style()
要适应受支持的三种标签样式,请执行以下操作:LABEL_STYLE_DISAMBIGUATE_ONLY
,LABEL_STYLE_TABLENAME_PLUS_COL
,以及LABEL_STYLE_NONE
。此外,对于核心和“未来风格”ORM查询,
LABEL_STYLE_DISAMBIGUATE_ONLY
现在是默认标签样式。此样式与现有的“无标签”样式的不同之处在于,标签是在列名冲突的情况下应用的;LABEL_STYLE_NONE
,则在任何情况下都不能通过名称访问重复的列名。对于标签很重要的情况,即
.c
集合能够毫不含糊地引用所有列,LABEL_STYLE_DISAMBIGUATE_ONLY
对于涉及此行为的Core和ORM中的所有SQLAlChemy功能来说,现在已经足够了。从SQLAlChemy1.0开始,结果集行通常在位置上与列构造对齐。对于使用以下功能的遗留ORM查询
Query
,应用的表加列名标签样式LABEL_STYLE_TABLENAME_PLUS_COL
继续使用,因此现有的测试套件和日志记录工具在默认情况下看不到行为上的变化。References: #4757
schema
[schema] [feature] ¶
已添加
TypeEngine.as_generic()
要映射特定于方言的类型,如sqlalchemy.dialects.mysql.INTEGER
,具有“最佳匹配”泛型SQLAlChemy类型,在本例中Integer
。安德鲁·汉尼根提供的请求。参见
使用数据库不可知类型反映 -示例用法
References: #5659
[schema] [usecase] ¶
这个
DDLEvents.column_reflect()
事件现在可以应用于MetaData
对象的Table
该集合的本地对象。参见
从反射表自动化列命名方案 -在ORM映射文档中
References: #5712
[schema] [usecase] ¶
添加的参数
CreateTable.if_not_exists
,CreateIndex.if_not_exists
,DropTable.if_exists
和DropIndex.if_exists
发送到CreateTable
,DropTable
,CreateIndex
和DropIndex
导致“IF NOT EXISTS”/“IF EXISTS”DDL被添加到CREATE/DROP的构造。并非所有数据库都接受这些短语,并且操作将在不支持它的数据库上失败,因为在单个DDL语句的范围内没有类似的兼容回退。拉蒙·威廉姆斯提供的请求。References: #2843
[schema] [changed] ¶
更改了
Identity
构造为使其在应用于Column
,它将自动暗示Column.nullable
应默认为False
,其方式类似于当Column.primary_key
参数设置为True
。这与符合以下条件的所有支持数据库的默认行为相匹配IDENTITY
暗示NOT NULL
。PostgreSQL后端是唯一支持添加NULL
转到一个IDENTITY
列,此处通过传递一个True
属性的值Column.nullable
参数。References: #5775
asyncio
[asyncio] [usecase] ¶
这个
AsyncEngine
,AsyncConnection
和AsyncTransaction
可以使用Python比较对象==
或!=
,它将基于两个给定对象所代理的“同步”对象来比较这两个给定对象。这很有用,因为有一些情况特别适用于AsyncTransaction
其中有多个实例AsyncTransaction
可以代理到相同的同步Transaction
,并且实际上是等效的。这个AsyncConnection.get_transaction()
方法当前将返回新的代理AsyncTransaction
每次作为AsyncTransaction
没有以其他方式以状态与其发起方相关联AsyncConnection
。[asyncio] [bug] ¶
调整了greenlet集成,它支持SQLAlchemy中的Python异步,以适应Python的处理
contextvars
(在python3.7中引入)用于greenlet
大于0.4.17的版本。Greenlet版本0.4.17以向后不兼容的方式添加了对contextvars的自动处理;我们已经与Greenlet的作者进行了协调,在0.4.17之后的版本中添加了一个首选的API,该API现在由SQLAlchemy的Greenlet集成支持。对于0.4.17之前的greenlet版本,不需要进行任何行为更改,版本0.4.17本身被阻止与依赖项无关。References: #5615
[asyncio] [bug] ¶
实现了“连接绑定”,用于
AsyncSession
,能够传递一个AsyncConnection
要创建AsyncSession
。以前,此用例未实现,并将在连接传递时使用关联引擎。这修复了“将会话加入到外部事务”用例不能在AsyncSession
。此外,还添加了方法AsyncConnection.in_transaction()
,AsyncConnection.in_nested_transaction()
,AsyncConnection.get_transaction()
,AsyncConnection.get_nested_transaction()
和AsyncConnection.info
属性。References: #5811
[asyncio] [bug] ¶
修复了异步连接池中的错误,其中
asyncio.TimeoutError
会被提高,而不是TimeoutError
。还修复了create_engine.pool_timeout
参数在使用异步引擎时设置为零,这以前会忽略超时和挡路,而不是像使用常规引擎那样立即超时QueuePool
。References: #5827
[asyncio] [bug] [pool] ¶
使用异步引擎时,连接池现在将分离并丢弃在其跟踪对象被垃圾收集时未显式关闭/返回到池的池连接,从而发出连接未正确关闭的警告。由于此操作发生在Python GC终结器期间,因此在连接上运行任何IO操作(包括事务回滚或连接关闭)是不安全的,因为这通常在事件循环之外。
这个
AsyncAdaptedQueue
在异步dPapis上默认使用时,应该仅在第一次使用队列以避免将其绑定到可能错误的事件循环时实例化队列。References: #5823
[asyncio] ¶
现在,SQLAlChemy异步模式在非异步兼容时检测并引发信息性错误 DBAPI 是使用的。使用标准
DBAPI
使用异步SQLAlChemy将导致它像任何同步调用一样进入挡路,从而中断异步循环的执行。
postgresql
[postgresql] [usecase] ¶
添加了新参数
ExcludeConstraint.ops
到ExcludeConstraint
对象,以支持具有此约束的运算符类规范。拉请求礼貌阿隆门泽。This change is also backported to: 1.3.21
References: #5604
[postgresql] [usecase] ¶
添加了读/写
.autocommit
属性设置为asyncpg方言的DBAPI适配层。这样,在处理需要直接与DBAPI连接使用“autocommit”的DBAPI特定方案时,相同.autocommit
可以使用psycopg2和pg8000的属性。[postgresql] [changed] ¶
修复了mental copg2方言将静默传递
use_native_unicode=False
标志,但实际上在Python3下没有任何效果,因为在Python3下,mental copg2 DBAPI无条件地使用Unicode。ArgumentError
在Python 3下使用时。添加了对Python 2的测试支持。[postgresql] [performance] ¶
通过基于每个连接缓存Asyncpg PreparedStatement对象,增强了Asyncpg方言的性能。对于在一组池连接上使用相同语句的测试用例,这似乎可以带来10-20%的速度提升。高速缓存大小是可调整的,也可以禁用。
参见
[postgresql] [bug] [mysql] ¶
修正了1.3.2中为PostgreSQL方言引入的回归,也复制到了1.3.18中MySQL方言的特性,其中
Table
构造如text()
作为Select.with_for_update.of
在PostgreSQL或MySQL编译器中无法正确容纳。This change is also backported to: 1.3.21
References: #5729
[postgresql] [bug] ¶
修正了一个小的回归,即即使检测到服务器版本信息低于版本8.2,初始化时也会发出“show standard_confirming_strings”的查询,以前它只在服务器版本8.2或更高版本中出现。在Amazon Redshift上查询失败,它报告的PG服务器版本早于此值。
References: #5698
[postgresql] [bug] ¶
支持
Column
对象以及ORM插入工具的属性作为set_
字典传递给Insert.on_conflict_do_update()
和Insert.on_conflict_do_update()
方法,它与Column
中的对象.c
目标集合Table
. 以前,只需要字符串列名;列表达式将被假定为表外表达式,该表达式将与警告一起完整呈现。References: #5722
[postgresql] [bug] [asyncio] ¶
修复了asyncpg方言中的错误,在这种情况下,“提交”或“回滚”期间的失败应该会取消整个事务;不再可能发出回滚。以前,连接将继续等待不能成功的回滚,因为异步cpg会拒绝它。
References: #5824
mysql
[mysql] [feature] ¶
添加了使用asyncio SQLAlChemy扩展时对aiomysql驱动程序的支持。
参见
References: #5747
[mysql] [bug] [reflection] ¶
修复了以下问题:仅在值中包含小数点的MariaDB上反映服务器默认值将无法正确反映,从而导致缺少任何服务器默认值的映射表。
This change is also backported to: 1.3.21
References: #5744
sqlite
[sqlite] [usecase] ¶
已实现插入。。。关于SQLite的冲突子句。拉蒙·威廉姆斯的请求。
参见
References: #4010
[sqlite] [bug] ¶
使用python
re.search()
而不是re.match()
作为Column.regexp_match()
方法。这与其他数据库上正则表达式的行为以及众所周知的SQLite插件的行为相匹配。References: #5699
mssql
[mssql] [bug] [datatypes] [mysql] ¶
方法从JSON字符串中提取浮点和/或小数值时,小数精度和行为都得到了改进
Comparator.as_float()
方法时,当JSON字符串中的数值有许多有效数字时;以前,MySQL后端会截断具有许多有效数字的值,而SQL Server后端会因为有效数字不足的小数转换而引发异常。这两个后端现在都使用与浮点兼容的方法,该方法不对浮点值的有效数字进行硬编码。对于精确数值,一种新的方法Comparator.as_numeric()
已添加,它接受精度和小数位数的参数,并将以Python形式返回值Decimal
不带浮点转换的对象,假设DBAPI支持它(除了pysqlite以外的所有对象)。References: #5788
oracle
[oracle] [bug] ¶
修复了由于以下原因而发生的回归问题 #5755 它实现了对Oracle的隔离级别支持。据报道,许多Oracle帐户实际上没有查询
v$transaction
视图,因此此功能已更改为在数据库连接失败时优雅地回退,其中方言将假定“READ COMMITTED”为缺省隔离级别,就像SQLAlChemy 1.3.21之前的情况一样。但是,显式使用Connection.get_isolation_level()
方法现在必须引发异常,因为具有此限制的Oracle数据库显式不允许用户读取当前隔离级别。This change is also backported to: 1.3.22
References: #5784
[oracle] [bug] ¶
现在不再推荐使用基本级别的Oracle两阶段事务。在从CX_ORACLE DEVS获得支持后,我们可以提供基本的XID+BEGIN/PREPARE支持,但有一些限制,这将在即将发布的CX_ORACLE版本中更全面地发挥作用。目前不支持两阶段“恢复”。
References: #5884
[oracle] [bug] ¶
甲骨文方言现在使用
select sys_context( 'userenv', 'current_schema' ) from dual
获取默认模式名,而不是SELECT USER FROM DUAL
,以适应对Oracle下会话本地架构名称的更改。References: #5716
misc
[usecase] [pool] [tests] ¶
改进文档并为次秒池超时添加测试。请求请求由Jordan Pittier提供。
References: #5582
[usecase] [pool] ¶
引擎连接例程的内部机制已经改变,现在可以保证
PoolEvents.connect()
处理程序,当使用insert=True
,将允许运行肯定被调用的事件处理程序 之前 任何特定于方言的初始化都会启动,尤其是当它执行诸如detect default schema name之类的操作时。以前,这在大多数情况下都会发生,但不是无条件的。模式文档中添加了一个新示例,说明如何在onconnect事件中建立“默认模式名”。[bug] [reflection] ¶
修复了现在不推荐使用的错误
autoload
在反射相关表时,正在反射例程内部调用参数。References: #5684
[bug] [pool] ¶
修复了使用关键字指定连接池事件的回归,最明显的是
insert=True
,将在设置事件时丢失。这将阻止需要在方言级别事件之前激发的启动事件正常工作。References: #5708
[bug] [pool] [pypy] ¶
修复了以下问题:如果签出的连接在未关闭的情况下落在范围之外,则在PyPy下进行垃圾回收时,连接池将不会将连接返回到池或以其他方式完成连接。这是一个长期存在的问题,因为PyPy在GC行为上的不同之处在于,如果弱引用终结器与也被垃圾收集的另一个对象相关,则不会调用这些终结器。现在维护了对相关记录的强引用,以便弱引用具有要触发的强引用“基”。
References: #5842
1.4.0b1
Released: November 2, 2020general
[general] [change] ¶
“ Python 设置.pytest”不再是一个测试运行器,因为Pypa不赞成使用它。对于基本测试运行,请使用不带参数的“tox”。
References: #4789
[general] [bug] ¶
重构了用于交叉导入模块的内部约定,这些模块之间具有相互依赖关系,因此不再修改函数和方法的已检查参数。这使得像pylint、Pycharm、其他代码linter之类的工具以及将来添加的假设pep-484实现能够正常工作,因为它们不再看到函数调用缺少的参数。新方法也更简单,更高效。
参见
platform
[platform] [change] ¶
这个
importlib_metadata
库用于扫描setuptools入口点,而不是pkg_资源。由于importlib_metadata是python3.8中包含的一个小库,因此兼容性库是作为Python 3.8以前版本的依赖项安装的。References: #5400
[platform] [change] ¶
安装已经现代化,可以使用设置.cfg对于大多数包元数据。
References: #5404
[platform] [removed] ¶
放弃了对Python3.4和3.5的支持,这些支持已经达到了EOL。python.7.2.2需要alchemy系列。
参见
Python3.6是Python3的最低版本;Python2.7仍然受支持
References: #5634
[platform] [removed] ¶
删除了与支持Jython和zxJDBC相关的所有方言代码。Jython多年来一直没有受到SQLAlchemy的支持,目前的zxJDBC代码根本就不起作用;目前,它只是占用空间并通过在文档中显示而增加混乱。目前,Jython似乎已经在其版本中实现了对python2.7的支持,但没有实现python3。如果再次支持Jython,它应该采用的形式是针对python3版本的Jython,并且各种后端的各种zxJDBC存根应该作为第三方方言来实现。
References: #5094
orm
[orm] [feature] ¶
ORM现在可以生成以前只有在使用时才可用的查询
Query
使用select()
直接构造。一个新的系统,通过这个系统ORM“插件”可以在一个核心中建立自己的系统Select
允许以前在Query
现在在Select
. 对于Update
和Delete
构造。使用调用时的构造Session.execute()
现在在方法中执行ORM相关的工作。为Select
, theResult
返回的对象现在包含ORM级别的实体和结果。参见
ORM查询内部统一,支持select、update、delete;2.0风格执行
References: #5159
[orm] [feature] ¶
添加了向由查询中的relationship属性生成的ON子句添加任意条件的功能,这适用于以下方法
Query.join()
以及加载程序选项,如joinedload()
. 此外,该选项的“全局”版本允许将限制条件应用于全局查询中的特定实体。参见
References: #4472
[orm] [feature] ¶
ORM声明性系统现在统一到ORM本身中,下面有新的导入空间
sqlalchemy.orm
以及新的映射类型。支持不使用基类的基于装饰器的映射,支持可以访问声明性类注册表的经典样式-mapper()调用,以及声明性与第三方类属性系统的完全集成,如dataclasses
和attrs
现在支持。参见
References: #5508
[orm] [feature] ¶
当在映射器上配置或通过查询选项配置时,立即加载程序(如联合加载、选择加载等)将在过期对象的刷新期间调用;对于selectinload和subqueryload,因为附加加载仅用于单个对象,“immediateload”方案用于这些类似于延迟加载发出的单亲查询的情况。
参见
References: #1763
[orm] [feature] ¶
添加了对使用Python定义的Python类的直接映射的支持
dataclasses
装饰工。请求请求由Václav Klusák提供。新功能集成到声明性级别的新支持中,例如dataclasses
和attrs
.参见
References: #5027
[orm] [feature] ¶
通过为ORM映射列添加了“raiseload”功能
defer.raiseload
参数对defer()
和deferred()
. 这为列表达式映射属性提供了与raiseload()
选项用于关系映射属性。更改还包括对有关过期的延迟列的一些行为更改;有关详细信息,请参阅迁移说明。参见
References: #4826
[orm] [usecase] ¶
在ORM bulk update and delete for synchronize_session=“evaluate”中发生的计算器现在支持IN和NOT IN运算符。也支持Tuple IN。
References: #1653
[orm] [usecase] ¶
一种增强的逻辑,用于跟踪关系写入同一列时是否会相互冲突,以包括两个关系的简单情况,这些关系之间应该有一个“backref”。这意味着,如果两个关系不是viewonly,没有与back-populates链接,也不在继承同级/重写安排中,并且将填充同一个外键列,则在映射器配置时会发出警告,警告可能会发生冲突。一个新参数
relationship.overlaps
是为了适应这种重叠持久性安排可能不可避免的非常罕见的情况而添加的。References: #5171
[orm] [usecase] ¶
ORM批量更新和删除操作,以前可以通过
Query.update()
和Query.delete()
方法以及通过Update
和Delete
构造 2.0 style 执行,现在将自动适应单个表继承鉴别器所需的附加WHERE条件,以便将语句限制为引用所请求的特定子类型的行。新的with_loader_criteria()
构造也支持批量更新/删除操作。[orm] [usecase] ¶
更新
relationship.sync_backref
标记关系以使其隐式False
在里面viewonly=True
关系,阻止同步事件。参见
References: #5237
[orm] [change] ¶
使用标识映射中已存在的标识刷新挂起对象的条件已调整为发出警告,而不是引发
FlushError
.其基本原理是,冲洗将继续进行,并提高IntegrityError
相反,就像现有的对象不在标识映射中一样。这有助于使用IntegrityError
作为一种捕获表中是否已存在行的方法。参见
“new instance conflicts with existing identity”错误现在是一个警告
References: #4662
[orm] [change] [sql] ¶
核心和ORM查询对象的选择现在在编译步骤中执行更多的Python计算任务,而不是在构建时执行。这是为了支持一个即将到来的缓存模型,该模型将提供基于从语句构造派生的缓存键的已编译语句结构的缓存,该缓存键本身在每次使用语句时都会用Python代码新构造。这意味着这些对象的内部状态可能与以前不一样,并且各种参数验证的一些(但不是全部)错误引发场景将发生在编译/执行阶段,而不是语句构造时。有关完整的详细信息,请参阅下面链接的迁移说明。
参见
[orm] [change] ¶
对于新的 2.0 style ORM查询。这样可以提高清晰度和性能。但是,在使用joined eager loading for collections时,通常需要在客户机端取消行,因为使用了join,所以集合中的每个元素都会有主实体的副本。现在必须手动启用此uniquing,并且可以使用新的
Result.unique()
修改器。为了避免无提示的失败,ORM显式地要求在2.0样式的ORM查询的结果使用连接的加载集合时调用该方法。新的selectinload()
在任何情况下,这种策略对于快速加载集合来说可能更可取。参见
References: #4395
[orm] [change] ¶
当被要求强制
select()
隐式构造到子查询中。这种情况发生在Query.select_entity_from()
和Query.select_from()
方法以及with_polymorphic()
功能。当一个SelectBase
(这是由select()
或Query
对象直接传递给这些函数和其他函数,ORM通常通过调用SelectBase.alias()
方法(它现在被SelectBase.subquery()
方法)。有关详细信息,请参阅下面链接的迁移说明。参见
References: #4617
[orm] [change] ¶
返回的“KeyedTuple”类
Query
现在换成了核心Row
类,其行为方式与KeyedTuple相同。在SQLAlchemy 2.0中,Core和ORM都将使用相同的方法返回结果行Row
对象。在此期间,Core使用向后兼容类LegacyRow
它保持了“RowProxy”使用的前一个映射/元组混合行为。参见
References: #4710
[orm] [performance] ¶
批量更新和删除方法
Query.update()
和Query.delete()
,以及它们的2.0风格的对应项,现在在使用“fetch”策略来获取受影响的主键标识列表时使用return,而不是在使用的后端支持返回时发出单独的SELECT。另外,“fetch”策略在一般情况下不会使已更新的属性过期,而是以与“evaluate”策略相同的方式直接应用更新的值,以避免必须刷新对象。“evaluate”策略还将回到过期属性,这些属性更新为在Python中没有价值的SQL表达式。参见
[orm] [performance] [postgresql] ¶
实现了对psycopg2的支持
execute_values()
通过对 #5401 ,因此,此扩展既可以用作一起批插入语句的策略,也可以在多个参数集中使用返回来批量检索主键值。这使得ORM代表PostgreSQL发出的几乎所有INSERT语句都可以成批提交,也可以通过execute_values()
对于这个特定的后端,扩展的速度比普通executemany()快五倍。参见
ORM批插入与psycopg2现在批处理语句在大多数情况下返回
References: #5263
[orm] [bug] ¶
针对映射继承子类的查询,该子类也使用
Query.select_entity_from()
或者,如果给定的子查询返回与给定子类不对应的实体(即,它们是同一层次结构中的同级或超类)时,为了提供可供选择的现有子查询的类似技术,现在将引发错误。以前,这些将被返回而不会出错。另外,如果继承映射是单个继承映射,则给定的子查询必须对多态性鉴别器列应用适当的筛选,以避免此错误;以前Query
会将此条件添加到外部查询,但是这会干扰某些类型的查询,这些查询也会返回其他类型的实体。参见
References: #5122
[orm] [bug] ¶
内部属性符号“无值”和“从不集”是统一的,因为这两个符号之间没有任何有意义的区别,除了一些以细微和无文档方式区分的代码路径之外,它们都是固定的。
References: #4696
[orm] [bug] ¶
修复了在映射器上针对
select()
当访问基础表时,如果版本u id_col本身与基础表相对应,则即使刷新在本地保留了该值,也会导致额外的负载。实际修复是由于 #4617 ,事实上select()
对象不再具有.c
属性,因此不会使映射器认为存在未知的列值。References: #4194
[orm] [bug] ¶
安
UnmappedInstanceError
现在为InstrumentedAttribute
如果实例是未映射的对象。在此之前AttributeError
被养大了。拉蒙·威廉姆斯的请求。References: #3858
[orm] [bug] ¶
这个
Session
对象不再初始化SessionTransaction
对象在构造或上一个事务关闭后立即执行;相反,“autobegin”逻辑现在启动新的SessionTransaction
下次需要时按需提供。基本原理包括从Session
这已经被关闭,以及消除由于创建SessionTransaction
经常被立即丢弃的对象。此更改会影响SessionEvents.after_transaction_create()
当Session
首先需要一个SessionTransaction
在当下,而不是Session
或之前的SessionTransaction
已经关闭。与Engine
而且数据库本身不受影响。参见
References: #5074
[orm] [bug] ¶
在ORM查询上下文帮助中添加了新的实体定位功能,其中
Session
正在对映射的类使用绑定字典,而不是单个绑定,并且Query
是针对最终从诸如Query.subquery()
. 当前的方法首先使用深度搜索实现,它利用了统一的select()
构造以跟踪作为构造一部分的第一个映射器。References: #4829
[orm] [bug] [inheritance] ¶
安
ArgumentError
如果selectable
和flat
参数在中设置为Truewith_polymorphic()
. 可选择的名称已经有别名,应用flat=True会用先前导致代码中断的匿名名称覆盖可选名称。拉蒙·威廉姆斯的请求。References: #4212
[orm] [bug] ¶
修正了多态加载内部结构中的问题,该问题可能会退回到更昂贵的、很快就会被弃用的结果列查找形式,这种形式与使用“with_polymorphic”一起使用。
References: #4718
[orm] [bug] ¶
如果在
relationship()
这也会设置viewonly=True。“级联”设置现在默认为非持久性相关的设置,只有在同时设置了viewonly时。这是从 #4993 在1.3中,此设置更改为发出警告。参见
References: #4994
[orm] [bug] ¶
改进了声明式继承扫描,当同一基类多次出现在基继承列表中时不会出错。
References: #4699
[orm] [bug] ¶
修复了ORM版本控制功能中的错误,即如果先前的值过期,那么为针对映射的可选(其中version_id_col是针对基础表配置的)计数器的显式版本标识分配将失败;这是由于映射的属性不会配置为active khistory=True。
References: #4195
[orm] [bug] ¶
如果ORM为具有主键但discriminator列为NULL的多态实例加载行,因为discriminator列不应为NULL,则将引发异常。
References: #4836
[orm] [bug] ¶
在新创建的对象上访问面向集合的属性不再发生变化
__dict__
,但仍然返回空集合,就像以前一样。这允许面向集合的属性与返回None
但也不会变异__dict__
.为了适应正在变化的集合,每次初始创建后都会返回相同的空集合,并且当它发生变化(例如,附加、添加的项等)时,会将其移动到__dict__
.这就消除了ORM中只读属性访问的最后一个变化的副作用。参见
访问临时对象上未初始化的集合属性不再发生变化 __dict__
References: #4519
[orm] [bug] ¶
如果过期属性列表中包含一个或多个使用
Session.expire()
或Session.refresh()
方法。这是一种尝试,在许多不需要自动刷新的情况下,属性的正常未到期与属性显式过期或刷新的情况之间找到一个中间点,这些属性可能依赖于会话中需要刷新的其他挂起状态。这两种方法现在也获得了一个新的标志Session.expire.autoflush
和Session.refresh.autoflush
,默认为True;当设置为False时,将禁用这些属性在未过期时发生的自动刷新。References: #5226
[orm] [bug] ¶
的行为
relationship.cascade_backrefs
标志将在2.0中反转并设置为False
无条件的,这样backrefs就不会将保存更新操作从forwards分配级联到backward分配。当参数保留为默认值时,将发出2.0弃用警告True
在这种级联操作实际发生的点。通过将标志设置为,可以一如既往地建立新的行为False
在一个特定的relationship()
,或者更一般地说,可以通过设置Session.future
标志为真。参见
References: #5150
[orm] [deprecated] ¶
使用的“切片索引”功能
Query
以及动态关系加载器将不再接受SQLAlchemy 2.0中的负索引。这些操作不能有效地工作并加载整个集合,这既令人惊讶又不可取。这些将在1.4中发出警告,除非Session.future
在这种情况下,它们将引发索引器错误。References: #5606
[orm] [deprecated] ¶
调用
Query.instances()
方法而不传递QueryContext
已弃用。最初的用例是Query
只有当给定的对象被选中时,才能生成一个对象。但是,要使其正常工作,需要从SQLAlchemy传递基本的元数据ResultProxy
它是从映射列表达式派生的,它最初来自QueryContext
. 要从任意SELECT语句中检索ORM结果,则Query.from_statement()
应使用方法。References: #4719
[orm] [deprecated] ¶
在ORM操作中使用字符串来表示关系名称,例如
Query.join()
,以及加载程序选项中所有ORM属性名的字符串,例如selectinload()
已弃用,将在SQLAlchemy 2.0中删除。应改为传递类绑定属性。这为给定的方法提供了更好的特异性,允许使用诸如of_type()
,并降低了内部复杂性。另外,
aliased
和from_joinpoint
参数到Query.join()
也被弃用。这个aliased()
construct现在提供了很大的灵活性和能力,应该直接使用。参见
[orm] [deprecated] ¶
中的弃用逻辑
Query.distinct()
它自动将ORDER BY子句中的列添加到columns子句中;这将在2.0中删除。参见
References: #5134
[orm] [deprecated] ¶
将关键字参数传递给诸如
Session.execute()
被传递到Session.get_bind()
方法已弃用;新的Session.execute.bind_arguments
应该传递字典。References: #5573
[orm] [deprecated] ¶
这个
eagerload()
和relation()
是旧别名,现在已弃用。使用joinedload()
和relationship()
分别。References: #5192
[orm] [removed] ¶
所有长期不推荐使用的“extension”类都已被删除,包括MapperExtension、SessionExtension、PoolListener、ConnectionProxy、AttributeExtension。自从0.7版被事件侦听器系统取代以来,这些类一直被弃用。
References: #4638
[orm] [removed] ¶
删除不推荐使用的加载程序选项
joinedload_all
,subqueryload_all
,lazyload_all
,selectinload_all
. 应该使用带有方法链接的普通版本来代替它们。References: #4642
[orm] [removed] ¶
删除不推荐使用的函数
comparable_property
. 请参考hybrid
扩展。这也删除了函数comparable_using
在声明性扩展中。删除不推荐使用的函数
compile_mappers
. 请使用configure_mappers()
删除不推荐的方法
collection.linker
. 请参考AttributeEvents.init_collection()
和AttributeEvents.dispose_collection()
事件处理程序。删除不推荐的方法
Session.prune
和参数Session.weak_identity_map
. 请参阅 会话引用行为 用于基于事件的方法来维护强身份引用。此更改还将删除类StrongInstanceDict
.删除不推荐使用的参数
mapper.order_by
. 使用Query.order_by()
确定结果集的顺序。删除不推荐使用的参数
Session._enable_transaction_accounting
.删除不推荐使用的参数
Session.is_modified.passive
.References: #4643
engine
[engine] [feature] ¶
实施了全新的
Result
对象替换上一个ResultProxy
对象。在Core中实现的子类CursorResult
具有与上一个兼容的调用接口ResultProxy
,此外,还添加了大量新功能,这些功能可应用于核心结果集和ORM结果集,这些结果集现在已集成到同一个模型中。Result
包括诸如列选择和重新排列、改进的fetchmany模式、uniquing等特性,以及可用于从内存结构创建数据库结果的各种实现。参见
[engine] [feature] [orm] ¶
SQLAlchemy现在在Core和ORM中包含了对Python异步的支持,使用included asyncio extension . 扩展使用 greenlet 为了适应SQLAlchemy面向同步的内部结构,使得最终与asyncio数据库适配器交互的asyncio接口现在是可行的。目前支持的单个驱动程序是 异步PG PostgreSQL驱动程序。
参见
References: #3414
[engine] [feature] [alchemy2] ¶
实现了
create_engine.future
参数,该参数允许与SQLAlchemy 2向前兼容。用于与SQLAlchemy 2向前兼容。此引擎的特点是始终使用autobegin执行事务性行为。参见
References: #4644
[engine] [feature] [pyodbc] ¶
修改了“setinputsize()”方言钩子集,允许方言单独的钩子以适合于该DBAPI的样式调用cursor.setinputsize(),从而为任何任意DBAPI正确扩展。具体地说,这是为了支持pyodbc的使用风格,而pyodbc的使用风格与cx_Oracle的使用风格有根本的不同。添加了对pyodbc的支持。
References: #5649
[engine] [feature] ¶
新增反射法
Inspector.get_sequence_names()
返回所有定义的序列和Inspector.has_sequence()
检查特定序列是否存在。对此方法的支持已添加到支持Sequence
:PostgreSQL、Oracle和MariaDB>=10.3。References: #2056
[engine] [feature] ¶
这个
Table.autoload_with
现在接受一个参数Inspector
对象,以及任何Engine
或Connection
和以前一样。References: #4755
[engine] [change] ¶
这个
RowProxy
“不再直接用一个proxy-dbale的内容来填充”这个类。现命名为Row
,即Python级别的值处理器如何被简化的机制,特别是当它影响到C代码的格式时,以便预先将DBAPI行处理成结果元组。对象返回的对象ResultProxy
现在是LegacyRow
子类,它维护映射/元组混合行为,但是Row
类现在的行为更像命名元组。参见
RowProxy不再是“代理”;现在称为Row,其行为类似于增强的命名元组
References: #4710
[engine] [change] [performance] [py3k] ¶
禁用了在python3下运行时在dialect启动时运行的“unicode returns”检查,这种检查已经出现了很多年,目的是测试当前DBAPI是否返回VARCHAR和NVARCHAR数据类型的Python unicode或Py2K字符串。默认情况下,在Python2下,检查仍然会发生,但是当Python2支持被删除时,SQLAlchemy 2.0中测试行为的机制将被删除。
这种逻辑在需要时非常有效,但是现在python3是标准的,所有dbapi都应该为字符数据类型返回python3字符串。在第三方DBAPI不支持这种情况下,内部的转换逻辑
String
仍然可用,并且第三方方言可以通过设置方言级别标志在其预先方言标志中指定这一点returns_unicode_strings
给其中一个String.RETURNS_CONDITIONAL
或String.RETURNS_BYTES
,即使在python3下,这两种方法都将启用Unicode转换。References: #5315
[engine] [performance] ¶
池“pre-ping”特性已经过改进,不再为刚刚在同一签出操作中打开的DBAPI连接调用。预ping仅适用于已签入池并再次签出的DBAPI连接。
References: #4524
[engine] [bug] ¶
修订了
Connection.execution_options.schema_translate_map
这样的特性使得SQL语句接收特定模式名的处理发生在语句的执行阶段,而不是在编译阶段。这是为了支持语句被有效缓存。以前,为特定运行呈现到语句中的当前模式将被视为缓存键本身的一部分,这意味着对于数百个模式的运行,将有数百个缓存键,从而使缓存的性能大大降低。新的行为是,渲染的方式与1.4中添加的“后编译”渲染类似 #4645 , #4808 .References: #5004
[engine] [bug] ¶
这个
Connection
在显式回滚最外层事务之前,对象现在不会清除回滚事务。这基本上是与ORM相同的行为Session
已经有很长一段时间了,在那里.rollback()
在所有封闭事务上,即使DBAPI级别的事务已经回滚,也需要对事务进行逻辑清除。新行为有助于处理诸如“ORM回滚测试套件”模式的情况,其中测试套件将事务回滚到ORM范围内,但试图从外部控制事务范围的测试工具不希望隐式启动新事务。参见
References: #4712
[engine] [bug] ¶
调整了方言初始化过程,使
Dialect.on_connect()
不会在第一个连接上第二次调用。先调用钩子,然后调用Dialect.initialize()
如果该连接是该方言的第一个连接,则不再调用其他事件。这就消除了对“on_connect”函数的两次调用,这会产生非常困难的调试情况。References: #5497
[engine] [deprecated] ¶
这个
URL
对象现在是一个不可变的命名元组。要修改URL对象,请使用URL.set()
方法生成新的URL对象。参见
URL对象现在是不可变的 -迁移注意事项
References: #5526
[engine] [deprecated] ¶
这个
MetaData.bind
参数以及“绑定元数据”的整体概念在SQLAlchemy 1.4中被弃用,并将在SQLAlchemy 2.0中删除。参数以及相关函数现在发出一个RemovedIn20Warning
什么时候? SQLAlchemy 2.0弃用模式 正在使用中。参见
References: #4634
[engine] [deprecated] ¶
这个
server_side_cursors
引擎范围的参数已弃用,将在将来的版本中删除。对于无缓冲的游标Connection.execution_options.stream_results
执行选项应在每次执行的基础上使用。[engine] [deprecated] ¶
这个
Connection.connect()
方法与“连接分支”的概念一样被弃用,它复制Connection
一个新的具有无操作“.close()”方法。这个模式是围绕着“无连接执行”的概念而设计的,这个概念在2.0中也被删除了。References: #5131
[engine] [deprecated] ¶
这个
case_sensitive
旗上create_engine()
已弃用;此标志是结果行对象转换的一部分,允许将区分大小写的列匹配作为默认值,同时为前一个匹配方法提供向后兼容性。对于一行的所有字符串访问都应该像任何其他Python映射一样被假定为区分大小写。References: #4878
[engine] [deprecated] ¶
“Implicit autocommit”是在连接上发出DML或DDL语句时发生的提交,已被弃用,不会成为SQLAlchemy 2.0的一部分。自动提交生效时会发出2.0样式的警告,以便可以调整调用代码以使用显式事务。
作为此更改的一部分,DDL方法如
MetaData.create_all()
当用来对付Engine
将在BEGIN块中运行操作(如果尚未启动)。参见
References: #4846
[engine] [deprecated] ¶
不赞成
Column
可以用作结果集行查找中的键,当Column
不是所选SQL selectable的一部分;也就是说,它只在名称上匹配。此时将针对此情况发出一个弃用警告。各种ORM用例,例如text()
结构已经过改进,因此在大多数情况下都避免了这种后备逻辑。References: #4877
[engine] [deprecated] ¶
不推荐使用剩余的引擎级自省和实用程序方法,包括
Engine.run_callable()
,Engine.transaction()
,Engine.table_names()
,Engine.has_table()
. 实用程序方法被现代上下文管理器模式所取代,表自省任务适合于Inspector
对象。References: #4755
[engine] [removed] ¶
删除不推荐的方法
get_primary_keys
在Dialect
和Inspector
类。请参考Dialect.get_pk_constraint()
和Inspector.get_primary_keys()
方法。删除不推荐的事件
dbapi_error
方法呢ConnectionEvents.dbapi_error
. 请参考ConnectionEvents.handle_error()
事件。此更改还将删除属性ExecutionContext.is_disconnect
和ExecutionContext.exception
.References: #4643
[engine] [removed] ¶
内部方言法
Dialect.reflecttable
已删除。对第三方方言的审查并没有发现任何使用这种方法的情况,因为它已经被记录为一种不应该被外部方言使用的方法。另外,私人Engine._run_visitor
方法也被删除。References: #4755
[engine] [removed] ¶
长期不赞成
Inspector.get_table_names.order_by
参数已删除。References: #4755
[engine] [renamed] ¶
这个
Inspector.reflecttable()
重命名为Inspector.reflect_table()
.References: #5244
sql
[sql] [feature] ¶
将“from linting”作为内置功能添加到SQL编译器中。这允许编译器维护特定SELECT语句中所有FROM子句的图形,这些语句由WHERE或in JOIN子句中的条件链接,这些子句将这些FROM子句链接在一起。如果两个子句之间没有生成警告的任何一个笛卡尔路径,则它们之间都可能发出警告。由于核心表达式语言和ORM都建立在一个“隐式FROMs”模型上,如果查询的任何部分引用了它,则会自动添加一个特定的FROM子句,因此很容易在无意中发生这种情况,希望新特性能够帮助解决这个问题。
参见
从linting内置将在SELECT语句中警告任何潜在的笛卡尔积
References: #4737
[sql] [feature] [mssql] [oracle] ¶
添加了新的“编译后参数”功能。此功能允许
bindparam()
构造使其值在传递给DBAPI驱动程序之前呈现为SQL字符串,但在编译步骤之后,使用编译器的“literal render”功能。这个特性的直接理由是支持那些不能像数据库驱动程序处理的绑定参数那样工作或执行得不好的限制/偏移方案,同时仍然允许SQLAlchemy SQL构造以其编译的形式进行缓存。新功能的直接目标是SQL Server(和Sybase)使用的不支持绑定参数的“TOP N”子句,以及Oracle方言使用的“ROWNUM”和可选的“FIRST_ROWS()”方案,已知前者在没有绑定参数的情况下性能更好,后者不支持绑定参数。该特性建立在最初开发的机制之上,以支持IN表达式的“扩展”参数。作为此功能的一部分,Oracleuse_binds_for_limits
功能已无条件打开,此标志现在已弃用。参见
新的“后编译”绑定参数用于Oracle、SQL Server中的限制/偏移
References: #4808
[sql] [feature] ¶
在支持的后端添加对正则表达式的支持。定义了两种操作:
ColumnOperators.regexp_match()
实现类似正则表达式匹配的函数。ColumnOperators.regexp_replace()
实现正则表达式字符串替换函数。
支持的后端包括SQLite、PostgreSQL、MySQL/MariaDB和Oracle。
参见
References: #1390
[sql] [feature] ¶
这个
select()
构造和相关构造现在允许在columns子句中复制列标签和列本身,从而精确反映列表达式的传入方式。这允许由执行结果返回的元组匹配最初为选择的内容,即ORMQuery
这样可以在两个构造之间建立更好的交叉兼容性。此外,它允许列定位敏感结构,如联合(即_selectable.CompoundSelect
)在特定列可能出现在多个位置的情况下更直观地构造。为了支持这一变化,ColumnCollection
已被修改以支持重复列以及允许整数索引访问。参见
References: #4753
[sql] [feature] ¶
增强了
select()
构造这样,当在子查询中使用select语句时,不同表中重复的列名现在会自动标记为唯一的标签名,而不需要使用组合了tablename和column name的完整“apply_labels()”功能。最重要的是,在c的子键集合中,键和标签是可以消除歧义的aliased()
针对实体和任意子查询的组合构造,以使其正确工作,尽管源表中的命名列相同,但无需发出“应用标签”警告。参见
从查询本身作为子查询进行选择,例如“from_self()” -说明了作为从
Query.from_self()
方法。References: #5221
[sql] [feature] ¶
“expanding-IN”特性在查询执行时根据与语句执行相关的特定参数生成IN表达式,现在用于针对文本值列表生成的all-IN表达式。这使得IN表达式可以独立于传递的值列表而完全可缓存,还包括对空列表的支持。对于IN表达式包含非文本SQL表达式的任何场景,将保留IN中每个位置的旧预呈现行为。这一更改还完善了对元组扩展的支持,以前类型特定的绑定处理器无法生效。
参见
All-IN表达式动态呈现列表中每个值的参数(例如展开参数)
References: #4645
[sql] [feature] ¶
以及作为 #4369 ,添加了一个新功能,旨在减少创建语句的Python开销,允许在指示参数传递给语句对象(如select()、Query()、update()等)时使用lambdas,并允许在lambdas中以类似于“baked Query”系统的方式构造完整语句。使用lambdas的基本原理来自于“baked query”方法,该方法使用lambdas将任何数量的Python代码封装到一个只需要在语句首次构造为字符串时调用的可调用代码中。但是,新特性更加复杂,因为作为参数传递的Python文本值是自动提取的,因此不再需要在此类查询中使用bindparam()对象。该特性的使用是可选的,可以根据需要使用小或大的程度,同时仍然允许语句完全可缓存。
参见
References: #5380
[sql] [usecase] ¶
这个
Index.create()
和Index.drop()
方法现在有了一个参数Index.create.checkfirst
,与Table
和Sequence
,启用后,将导致操作在执行创建或删除操作之前检测索引是否存在。References: #527
[sql] [usecase] ¶
这个
true()
和false()
运算符现在可以作为join()
在不支持“原生布尔”表达式(例如Oracle或SQL Server)的后端上,表达式将呈现为“1=1”表示真,“1=0”表示假。这是多年前在 #2804 for和/或表达式。[sql] [usecase] ¶
改变方法
__str
属于ColumnCollection
以避免与python字符串列表混淆。References: #5191
[sql] [usecase] ¶
向添加支持
FETCH {{FIRST | NEXT}} [ count ] {{ROW | ROWS}} {{ONLY | WITH TIES}}
在所支持的后端的选择中,当前为PostgreSQL、Oracle和MSSQL。References: #5576
[sql] [usecase] ¶
添加了额外的逻辑,使某些通常包装单个数据库列的SQL表达式将在SELECT语句中使用该列的名称作为其“匿名标签”名称,这可能使结果元组中基于键的查找更直观。最主要的例子是CAST表达式,例如。
CAST(table.colname AS INTEGER)
,它将其默认名称导出为“colname”,而不是通常的“anon_1”标签,即,CAST(table.colname AS INTEGER) AS colname
. 如果内部表达式没有名称,则使用前面的“匿名标签”逻辑。当使用SELECT语句时Select.apply_labels()
,例如ORM发出的那些,标记逻辑将生成<tablename>_<inner column name>
如果在同一列中单独命名。这个逻辑现在适用于cast()
和type_coerce()
构造以及一些单元素布尔表达式。参见
References: #4449
[sql] [change] ¶
“子句强制”系统,它是sqlachemy core接收参数并将其解析为
ClauseElement
为了构建SQL表达式对象,结构已从一系列特殊函数重写为完全一致的基于类的系统。此更改是内部的,在将错误类型的参数传递给表达式对象时,除了更具体的错误消息之外,对最终用户不应产生任何影响,但是此更改是涉及角色和行为的一组更大更改的一部分。select()
物体。References: #4617
[sql] [change] ¶
增加了一个核心
Values
对象,该对象允许在支持它的数据库(主要是PostgreSQL和SQL Server)的SQL语句的FROM子句中使用VALUES构造。References: #4868
[sql] [change] ¶
这个
select()
construct正朝着一个新的调用形式移动select(col1, col2, col3, ..)
,删除所有其他关键字参数,因为这些参数都适合使用生成方法。传递给的列或表参数的单个列表select()
仍然接受,但是如果表达式以简单的位置样式传递,则不再需要。使用此表单时,不允许使用其他关键字参数。参见
References: #5284
[sql] [change] ¶
作为SQLAlchemy 2.0迁移项目的一部分,对
SelectBase
类层次结构是所有“select”语句构造的根,因为它们不再直接用作FROM子句,也就是说,它们不再是子类。FromClause
.对于最终用户,更改主要意味着select()
在另一个的FROM子句中构造select()
首先需要将它包装在子查询中,这在历史上是通过使用SelectBase.alias()
方法,现在也可以通过使用SelectBase.subquery()
.在任何情况下,这通常都是一个要求,因为在任何情况下,多个数据库都不会在其FROM子句中接受未命名的select子查询。参见
References: #4617
[sql] [change] ¶
添加了新的核心类
Subquery
它取代了Alias
创建命名子查询时,SelectBase
对象。Subquery
行为方式与Alias
它是由SelectBase.subquery()
方法;为了便于使用和向后兼容性,将SelectBase.alias()
方法是这个新方法的同义词。参见
References: #4617
[sql] [performance] ¶
对Core和ORM内部结构的全面重组和重构现在允许DQL(例如SELECTs)和DML(例如INSERT、UPDATE、DELETE)区域内的所有Core和ORM语句允许它们的SQL编译以及结果获取元数据的构造在大多数情况下被完全缓存。这有效地提供了过去版本中“Baked Query”扩展为ORM提供的透明和通用版本。新特性可以根据它最终为给定方言生成的字符串计算任何给定SQL结构的缓存键,从而允许每次组成等效select()、Query()、insert()、update()或delete()对象的函数在第一次生成语句后缓存该语句。
这个特性是透明的,但是包括一些新的编程范例,可以用来使缓存更加高效。
参见
透明的SQL编译缓存添加到Core、ORM中的所有DQL、DML语句中
References: #4639
[sql] [bug] ¶
修正了从ORM绑定列构造约束时出现的问题,主要是
ForeignKey
但是UniqueConstraint
,CheckConstraint
还有其他,ORM级别InstrumentedAttribute
被完全丢弃,列中的所有ORM级注释都将被删除;这使得约束仍然是完全可pickle的,而不需要拉入ORM级别的实体。这些注释不必出现在模式/元数据级别。References: #5001
[sql] [bug] ¶
注册函数名基于
GenericFunction
现在在所有情况下都以不区分大小写的方式检索,从1.3中删除了折旧逻辑,该逻辑暂时允许多个GenericFunction
存在不同情况的对象。AGenericFunction
它将替换同名的另一个对象,无论它是否区分大小写,都会在替换对象之前发出警告。[sql] [bug] ¶
创建
and_()
或or_()
不带参数或为空的构造*args
现在将发出一个弃用警告,因为生成的SQL是一个no-op(即,它呈现为一个空字符串)。这种行为被认为是不直观的,所以对于空的或者可能是空的and_()
或or_()
例如,布尔结构应该包括在默认值中and_(True, *args)
或or_(False, *args)
. 与许多主要版本的SQLAlchemy一样,如果*args
部分非空。References: #5054
[sql] [bug] ¶
改进了
tuple_()
构造使其在columns子句上下文中使用时行为可预测。在大多数后端,SQL元组不支持作为“SELECT”columns子句元素;在那些支持的后端(PostgreSQL,毫不奇怪),Python DBAPI没有“嵌套类型”的概念,因此在获取此类对象的行时仍然存在挑战。使用tuple_()
在一个select()
或Query
现在将提高CompileError
在tuple_()
对象被认为是为了获取行而呈现的(即,如果元组在子查询的columns子句中,则不会引发错误)。ORM使用时Bundle
每列的子元组都应该作为一个显式的消息返回。此外,元组现在将在所有上下文中使用括号呈现。以前,圆括号不会在导致未定义行为的列上下文中呈现。References: #5127
[sql] [bug] [postgresql] ¶
改进了对字符串中包含百分号的列名的支持,包括修复了涉及匿名标签的问题(其中还嵌入了一个带有百分号的列名),以及使用与CX_ORACLE方言使用的类似的后期转义过程,重新建立了对具有嵌入百分号的Mental copg2方言的绑定参数名的支持。
References: #5653
[sql] [bug] ¶
作为的子类创建的自定义函数
FunctionElement
现在将根据函数的“名称”生成一个“匿名标签”,就像其他函数一样Function
对象,例如。"SELECT myfunc() AS myfunc_1"
. 虽然SELECT语句不再需要标签才能使结果代理对象正常工作,但是ORM仍然通过使用对象作为映射键来定位行中的列,当列表达式具有不同的名称时,这一方法更可靠。在任何情况下,行为现在在由生成的函数之间保持一致func
以及那些作为习俗产生的FunctionElement
物体。References: #4887
[sql] [bug] ¶
改写了
ClauseElement.compare()
方法以新的基于访问者的方法,并额外增加测试覆盖范围,确保ClauseElement
子类在结构上可以相互精确地比较。目前ORM中很少使用结构比较功能,但它也可能构成新缓存功能的基础。References: #4336
[sql] [bug] ¶
不赞成使用
DISTINCT ON
用PostgreSQL以外的方言。反对MySQL方言中string distinct的旧用法References: #4002
[sql] [bug] ¶
A的ORDER BY子句
_selectable.CompoundSelect
例如union、except等在应用时不会呈现与给定列关联的表名。CompoundSelect.order_by()
就A而言Table
-绑定列。大多数数据库都要求ORDER BY子句中的名称只能表示为与第一条SELECT语句中的名称匹配的标签名称。变化与 #4617 在此之前的解决方法是指.c
的属性_selectable.CompoundSelect
以获取没有表名的列。由于子查询现在已命名,因此此更改既允许工作区继续工作,也允许表绑定列以及CompoundSelect.selected_columns
要在中使用的集合CompoundSelect.order_by()
方法。References: #4617
[sql] [bug] ¶
这个
Join
construct不再将“onclause”视为要从封闭的FROM列表中省略的附加FROM对象的源Select
对象作为独立于对象的。这适用于包含对JOIN外部的另一个FROM对象的引用的ON子句;虽然从SQL的角度来看,这通常是不正确的,但是省略它也是不正确的,并且行为更改使Select
/Join
表现得更直观一点。References: #4621
[sql] [deprecated] ¶
这个
Join.alias()
方法已弃用,将在SQLAlchemy 2.0中删除。应改为使用显式select+子查询或内部表的别名。References: #5010
[sql] [deprecated] ¶
这个
Table
类现在在定义具有相同名称的列时引发弃用警告。用新参数替换列Table.append_column.replace_existing
已添加到Table.append_column()
方法。这个
ColumnCollection.contains_column()
现在将在使用字符串调用时引发错误,建议调用方使用in
相反。[sql] [removed] ¶
在1.3中不推荐使用的“threadlocal”执行策略,以及“引擎策略”和
Engine.contextual_connect
方法。“strategy='mock'”关键字参数目前仍被接受,但有一个弃用警告;请使用create_mock_engine()
而不是这个用例。参见
“threadlocal”引擎策略已弃用 -来自1.3迁移说明,其中讨论了弃用的基本原理。
References: #4632
[sql] [removed] ¶
移除
sqlalchemy.sql.visitors.iterate_depthfirst
和sqlalchemy.sql.visitors.traverse_depthfirst
功能。SQLAlchemy的任何部分都没有使用这些函数。这个iterate()
和traverse()
函数通常用于这些函数。还删除了剩余函数中未使用的选项,包括“column_collections”、“schema_visitor”。[sql] [removed] ¶
从中删除了绑定引擎的概念
Compiler
对象,并删除.execute()
和.scalar()
方法从Compiler
. 这些基本上都是十多年前被遗忘的方法,没有实际用途,而且不适合Compiler
对象本身保持对Engine
.[sql] [removed] ¶
删除不推荐使用的方法
Compiled.compile
,ClauseElement.__and__
和ClauseElement.__or__
和属性Over.func
.删除不推荐使用的
FromClause.count
方法。请使用count
功能可从func
命名空间。References: #4643
[sql] [removed] ¶
删除不推荐使用的参数
text.bindparams
和text.typemap
. 请参考TextClause.bindparams()
和TextClause.columns()
方法。删除不推荐使用的参数
Table.useexisting
. 请使用Table.extend_existing
.References: #4643
[sql] [renamed] ¶
Table
参数mustexist
已重命名为Table.must_exist
使用时会发出警告。[sql] [renamed] ¶
这个
SelectBase.as_scalar()
和Query.as_scalar()
方法已重命名为SelectBase.scalar_subquery()
和Query.scalar_subquery()
,分别。旧名称继续存在于1.4系列中,并带有拒绝警告。此外,隐性胁迫SelectBase
,Alias
当在列上下文中计算时,也不推荐将其他面向选择的对象转换为标量子查询,并发出警告SelectBase.scalar_subquery()
应显式调用方法。在以后的主要版本中,此警告将变成一个错误,但是当SelectBase.scalar_subquery()
需要调用。更改的后一部分是为了清晰和减少查询强制系统的隐式决策。这个Subquery.as_scalar()
方法,以前是Alias.as_scalar
,也被弃用;.scalar_subquery()
应该直接从 `_ 表达式.选择`对象或 :class:`_query.Query()
对象。此更改是要转换的较大更改的一部分
select()
对象不再是“From子句”类层次结构的直接组成部分,它还包括对子句强制系统的大修。References: #4617
[sql] [renamed] ¶
几个操作符被重命名,以在SQLAlchemy中实现更一致的命名。
操作员变更如下:
isfalse
is nowis_false
isnot_distinct_from
is nowis_not_distinct_from
istrue
is nowis_true
notbetween
is nownot_between
notcontains
is nownot_contains
notendswith
is nownot_endswith
notilike
is nownot_ilike
notlike
is nownot_like
notmatch
is nownot_match
notstartswith
is nownot_startswith
nullsfirst
is nownulls_first
nullslast
is nownulls_last
isnot
is nowis_not
not_in_
is nownot_in
因为这些是核心操作员,因此此更改的内部迁移策略是在较长的时间内(如果不是无限期地)支持遗留术语,但是将所有文档、教程和内部用法更新为新术语。新术语用于定义函数,旧术语已被弃用为新术语的别名。
[sql] [postgresql] ¶
允许在创建时指定数据类型
Sequence
在PostgreSQL中使用参数Sequence.data_type
.References: #5498
[sql] [reflection] ¶
在所有支持的后端(sqlite、mysql、postgresql)上,外键的“no action”关键字“on update”现在被认为是外键的默认级联,当检测到时,反射字典中不包括该关键字;对于所有prev,这已经是postgresql和mysql的行为。在任何情况下都是ious sqlachemy版本。当检测到“restrict”关键字时,它会被正向存储;PostgreSQL会报告这个关键字,而8.0版的MySQL也会报告这个关键字。在早期的MySQL版本中,数据库不报告它。
References: #4741
[sql] [reflection] ¶
添加了对反射“identity”列的支持,这些列现在作为
Inspector.get_columns()
. 完全反射时Table
对象,标识列将使用Identity
构造。目前支持的后端是PostgreSQL>=10、Oracle>=12和MSSQL(具有不同的语法和功能子集)。
schema
[schema] [change] ¶
这个
Enum.create_constraint
和Boolean.create_constraint
参数现在默认为False,表示在创建这两个数据类型的所谓“非本机”版本时,默认情况下不会生成检查约束。这些检查约束呈现了模式管理维护的复杂性,应该选择使用,而不是默认打开。参见
References: #5367
[schema] [bug] ¶
清理了内部
str()
对于数据类型,以便所有类型都生成一个不存在任何方言的字符串表示,包括它适用于不存在该方言的第三方方言类型。字符串表示法默认为该类型的大写名称,不包含其他内容。References: #4262
[schema] [removed] ¶
删除不推荐使用的类
Binary
. 请使用LargeBinary
.References: #4643
[schema] [renamed] ¶
更名为
Table.tometadata()
方法到Table.to_metadata()
. 以前的名称仍然保留,但有一个弃用警告。References: #5413
[schema] [sql] ¶
增加了
Identity
构造,该构造可用于配置以生成的{ALWAYS}作为标识呈现的标识列。目前支持的后端是PostgreSQL>=10、Oracle>=12和MSSQL(具有不同的语法和功能子集)。
extensions
[extensions] [usecase] ¶
使用
sqlalchemy.ext.compiled
当自定义构造被解释为SELECT语句的columns子句中的元素时,extension将自动向编译器添加上下文信息,以便自定义元素可以作为结果行映射中的键,这是ORM用来将列元素匹配到结果元组的目标类型。References: #4887
[extensions] [change] ¶
添加了新参数
AutomapBase.prepare.autoload_with
取代AutomapBase.prepare.reflect
和AutomapBase.prepare.engine
.References: #5142
postgresql
[postgresql] [usecase] ¶
添加了对所有psycopg2、asyncpg和pg8000方言的PostgreSQL“readonly”和“deferable”标志的支持。这利用了新的通用版本的“隔离级别”API来支持通过执行选项设置的其他类型的会话属性,这些属性在连接返回到连接池时会可靠地重置。
参见
References: #5549
[postgresql] [usecase] ¶
的最大缓冲区大小
BufferedRowResultProxy
,这是PostgreSQL等方言在stream_results=True
,现在可以设置为大于1000的数字,缓冲区将增长到该大小。以前,即使值设置得更大,缓冲区也不会超过1000。现在,缓冲区的增长也是基于目前设定为5的简单乘数。请求请求由Soumaya mauthor提供。References: #4914
[postgresql] [change] ¶
在PostgreSQL中使用psycopg2方言时,psycopg2最低版本设置为2.7。psycopg2方言依赖于过去几年发布的psycopg2的许多特性,因此为了简化方言,2017年3月发布的2.7版现在是最低版本。
[postgresql] [performance] ¶
psycopg2方言现在默认使用
execute_values()
psycopg2扩展,用于已编译的INSERT语句,并在使用此扩展时实现返回支持。这使得即使包含自增序列或标识值的INSERT语句运行得非常快,同时仍然能够返回新生成的主键值。ORM将在一个单独的变更中集成这个新特性。参见
psycopg2方言的特性是“execute_values”,默认情况下返回for INSERT语句 -关于
executemany_mode
参数。References: #5401
[postgresql] [bug] ¶
pg8000方言已经针对PostgreSQL的最新版本的pg8000驱动程序进行了修订和现代化。托尼洛克提供的请求。请注意,这必然会将pg8000固定在1.16.6或更高版本,该版本不再支持Python2。需要pg8000的Python 2用户应确保其要求固定在
SQLAlchemy<1.4
。[postgresql] [deprecated] ¶
不推荐使用pygresql和py postgresql方言。
References: #5189
[postgresql] [removed] ¶
删除对表单的已弃用引擎URL的支持
postgres://
;这已经发出警告很多年了,项目应该使用postgresql://
.References: #4643
mysql
[mysql] [feature] ¶
在mysql方言中添加了对MariaDB Connector/Python的支持。原始拉请求由乔治里克特提供。
References: #5459
[mysql] [usecase] ¶
添加了一个新的方言标记“mariadb”,它可以在
create_engine()
网址。这将提供正在使用的mysql方言的MariaDB方言子类,强制将“is_MariaDB”标志设置为True。如果接收到不指示MariaDB正在使用的服务器版本字符串,方言将引发错误。这对于特定于MariaDB的测试场景以及支持硬编码为MariaDB概念的应用程序非常有用。随着MariaDB和MySQL的特性集和使用模式继续分化,这种模式可能会变得更加突出。References: #5496
[mysql] [usecase] ¶
添加了对
Sequence
使用MariaDB 10.3和更高版本构建,因为这个数据库现在支持这个功能。结构与Table
对象的方法与对其他数据库(如PostgreSQL和Oracle)相同;如果在integer主键“autoincrement”列中存在,则使用它生成默认值。为了向后兼容,支持Table
那有Sequence
在它上,为了支持像Oracle这样的只使用序列的数据库,同时仍然没有为MariaDB关闭sequence,应该设置optional=True标志,这表示只有在目标数据库没有提供其他选项的情况下,序列才应该用于生成主键。参见
References: #4976
[mysql] [bug] ¶
MySQL和MariaDB方言现在从信息中查询_schema.tables模式系统视图,以确定特定表是否存在。以前,“DESCRIBE”命令与异常捕获一起使用,以检测不存在的情况,这将产生在连接上发出回滚的不良效果。似乎有一些遗留的编码问题阻止了“SHOW TABLES”的使用,但是由于MySQL现在支持的是5.0.2或更高版本,原因是 #4189 ,information_schema表现在在所有情况下都可用。
[mysql] [bug] ¶
与一起使用的“skip_locked”关键字
with_for_update()
将在所有MySQL后端呈现“SKIP LOCKED”,这意味着对于低于version8的MySQL和当前的MariaDB后端,它将失败。这是因为这些后端不支持“SKIP LOCKED”或任何等效的方法,因此不应忽略此错误。这是从1.3系列中的警告升级而来的。References: #5568
[mysql] [bug] ¶
MySQL方言的服务器版本信息元组现在都是数字的。像“MariaDB”这样的字符串标记不再存在,因此数值比较在所有情况下都有效。是否检测到mariadb,应参考方言上的.is_mariadb标志。另外,删除了支持非常旧的MySQL版本3.x和4.x的结构;现在支持的最低MySQL版本是5.0.2。
References: #4189
[mysql] [deprecated] ¶
不推荐使用OurSQL方言。
References: #5189
[mysql] [removed] ¶
删除不推荐使用的方言
mysql+gaerdbms
从1.0版开始就被弃用了。直接使用MySQLdb方言。删除不推荐使用的参数
quoting
从ENUM
和SET
在mysql
方言。当需要时,SQLAlchemy会自动引用传递给枚举或集合的值。References: #4643
sqlite
[sqlite] [change] ¶
放弃了对右嵌套连接重写的支持,以支持2013年发布的3.7.16之前的旧SQLite版本。现在支持的所有现代Python版本都应该包括SQLite的更新版本。
参见
删除了SQLite方言中的“join-rewriting”逻辑;更新了导入
References: #4895
mssql
[mssql] [feature] [sql] ¶
增加了对
JSON
SQL Server方言上的数据类型,使用JSON
实现,它针对NVARCHAR(max)
数据类型符合SQL Server文档。实施由戈德汤普森提供。References: #4384
[mssql] [feature] ¶
添加了对“createsequence”和full的支持
Sequence
支持Microsoft SQL Server。这将删除不推荐使用的功能Sequence
对象来操作标识特征,现在应该使用mssql_identity_start
和mssql_identity_increment
如文件所示 自动增量行为/标识列 . 更改包括一个新参数Sequence.data_type
以适应SQLServer对数据类型的选择,对于该后端,数据类型包括INTEGER、BIGINT和DECIMAL(n,0)。SQL Server版本的默认起始值Sequence
已设置为1;此默认值现在在所有后端的创建序列DDL中发出。参见
[mssql] [usecase] [postgresql] [reflection] [schema] ¶
改进了对覆盖索引(包含列)的支持。添加了postgresql使用Core的INCLUDE子句呈现CREATE INDEX语句的功能。索引反射还报告了mssql和postgresql(11+)分别包含的列。
References: #4458
[mssql] [usecase] [postgresql] ¶
增加了对部分索引/过滤索引的检查/反映的支持,即那些使用
mssql_where
或postgresql_where
参数,带Index
. 条目是由返回的词典的两部分Inspector.get_indexes()
以及反射的一部分Index
被反射的构造。拉蒙·威廉姆斯的请求。References: #4966
[mssql] [usecase] [reflection] ¶
添加了对使用SQLServer方言反射临时表的支持。现在,在MSSQL“tempdb”系统目录中对以井号“#”为前缀的表名进行内省。
References: #5506
[mssql] [change] ¶
对于SQL Server 11及更高版本,SQL Server OFFSET和FETCH关键字现在用于限制/偏移,而不是使用窗口函数。TOP仍然用于只包含LIMIT的查询。拉请求由埃尔金提供。
References: #5084
[mssql] [bug] [schema] ¶
修正了一个问题
sqlalchemy.engine.reflection.has_table()
总是返回False
对于临时表。References: #5597
[mssql] [bug] ¶
修复了
DATETIMEOFFSET
数据类型基于DateTime
类层次结构,因为这是一个保存数据类型的日期时间。References: #4980
[mssql] [deprecated] ¶
不推荐使用adodbapi和mxODBC方言。
References: #5189
[mssql] ¶
mssql方言假设至少使用了mssql2005。如果检测到以前的版本,则不会引发硬异常,但对于旧版本,操作可能会失败。
[mssql] [reflection] ¶
作为支持反射的一部分
Identity
对象,方法Inspector.get_columns()
不再回来了mssql_identity_start
和mssql_identity_increment
作为其中的一部分dialect_options
. 使用中的信息identity
而不是钥匙。References: #5527
[mssql] [engine] ¶
贬低
legacy_schema_aliasing
参数到sqlalchemy.create_engine()
. 这是一个过时已久的参数,自1.1版起默认为False。References: #4809
oracle
[oracle] [usecase] ¶
默认情况下,Oracle方言的最大u identifier_长度为128个字符,除非首次连接时兼容版本低于12.2,在这种情况下,将使用30个字符的传统长度。这是对1.3系列所承诺的问题的延续,该系列在第一次连接时添加了最大标识符长度检测,并对Oracle server中的更改发出警告。
参见
最大标识符长度 -在Oracle方言文档中
References: #4857
[oracle] [change] ¶
Oracle中使用的限制/偏移方案现在使用命名子查询,而不是未命名的子查询,因为它透明地将select语句重写为使用包含rownum的子查询的语句。这一变化是一个更大变化的一部分,核心不再直接支持未命名的子查询,同时也使Oracle方言中select()构造的内部使用更加现代化。
[oracle] [bug] ¶
正确渲染
Sequence
和Identity
列选项nominvalue
和nomaxvalue
作为NOMAXVALUE` and `` oracle数据库上的NOMINVALUE
。[oracle] [bug] ¶
这个
INTERVAL
甲骨文方言的类现在正确地成为抽象版本的子类Interval
以及正确的“仿真”基类,它允许在本机和非本机模式下正确的行为;以前它只基于TypeEngine
.References: #4971