[orm] [bug]
修正了在新的“模棱两可的froms”查询逻辑中引入的1.3回归 join()在更明确地确定“左”端时处理模糊性 在哪里 Query
在FROM子句中显式地将实体 Query.select_from()
并使用 Query.join()
如果在附加联接中使用该实体,则稍后将导致“模棱两可的自”错误,因为该实体在 Query
. 修复程序通过将独立实体折叠到已经是其一部分的联接中来解决这种不确定性,其方式与呈现select语句时最终发生的方式相同。
References: #4584
[mssql] [bug]
Fixed issue in SQL Server dialect where if a bound parameter were present in an ORDER BY expression that would ultimately not be rendered in the SQL Server version of the statement, the parameters would still be part of the execution parameters, leading to DBAPI-level errors. Pull request courtesy Matt Lewellyn.
¶References: #4587
[bug] [pool]
固定的行为回归是由于对 Pool
那里 SingletonThreadPool
不再使用此选项,它会导致“返回时回滚”逻辑在相同的情况下发生 Engine
在事务上下文中多次用于连接或隐式执行,从而取消事务。虽然这不是推荐的使用引擎和连接的方法,但是在使用时,这是一个令人困惑的行为变化。 SingletonThreadPool
,无论在同一线程中使用同一引擎执行了什么操作,事务都应保持打开状态。这个 use_threadlocal
标志仍被弃用,但是 SingletonThreadPool
现在实现了它自己的相同逻辑版本。
References: #4585
[orm] [bug] [ext]
恢复了对纯python描述符的实例级支持,例如 @property
对象,与关联代理一起,如果被代理的对象根本不在ORM范围内,它将被分类为“不明确”,但直接被代理。对于类级访问,一个基本类级``uuuu get_uuuu()``现在返回 AmbiguousAssociationProxyInstance
直接,而不是引发异常,这是与返回 AssociationProxy
这是可能的。还改进了这些对象的字符串化,使其更能描述当前状态。
[orm] [bug]
修复了使用 with_polymorphic()
或者,当别名目标用作 Select.correlate_except()
在 column_property()
. 这需要对子句自适应机制进行修复,以正确处理出现在“相关项除外”列表中的可选项,处理方式与出现在“相关项”列表中的可选择项类似。这最终是一个相当基本的bug,持续了很长时间,但很难发现它。
References: #4537
[orm] [bug]
修正了在不使用的情况下,试图将关系选项链接到别名类时应该引发的新错误消息的回归。 PropComparator.of_type()
而是提高 AttributeError
. 注意,在1.3中,创建从普通映射器关系到 AliasedClass
不使用 PropComparator.of_type()
.
References: #4566
[sql] [bug] [documentation]
多亏了 类型引擎方法绑定表达式,列表达式与变量、类型特定的类型一起使用 我们不再需要依赖于直接对方言特定类型进行子类划分的方法, TypeDecorator
现在可以处理所有案件。此外,上述更改使基本SQLAlchemy类型的直接子类工作的可能性稍小,这可能会产生误导。文档已更新以供使用 TypeDecorator
对于这些示例,包括postgresql“arrayofenum”示例数据类型和对“subclass a type directly”的直接支持已被删除。
References: #4580
[postgresql] [feature]
增加了对psycopg2方言无参数连接URL的支持,这意味着可以将URL传递给 create_engine()
作为 "postgresql+psycopg2://"
没有其他参数来指示传递给libpq的空DSN,它指示连接到“localhost”,而不提供用户名、密码或数据库。拉请求由朱利安·梅恩提供。
References: #4562
[postgresql] [bug]
修改了 Select.with_for_update.of
参数,以便在传递联接或其他组合可选项时, Table
对象将从中筛选出来,允许将join()对象传递给参数,就像在将联接表继承与ORM一起使用时通常会发生的情况一样。拉车请求由Raymond Lu提供。
References: #4550
[orm] [feature]
这个 Query.get()
方法现在可以接受属性键和值的字典,作为指示要加载的主键值的方法;对于组合主键特别有用。拉车请求由Sanjana S.提供。
References: #4316
[orm] [feature]
现在可以将SQL表达式指定给ORM刷新的主键属性,方法与中描述的普通属性相同。 将SQL插入/更新表达式嵌入到刷新中 其中,表达式将通过返回返回,然后返回到ORM;如果是pysqlite,则使用cursor.lastrowid属性。需要支持返回的数据库(例如postgresql、oracle、sql server)或pysqlite。
¶References: #3133
[engine] [feature]
修改了格式 StatementError
当变细。每个错误细节在多个新行上被分解,而不是在一行上被分隔开。此外,SQL表示现在将对SQL语句进行字符串化,而不是使用 repr()
,使换行符按原样呈现。内特·克拉克的请求。
References: #4500
[schema] [feature]
添加了新参数 Table.resolve_fks
和 MetaData.reflect.resolve_fks
当设置为false时,将禁用在 ForeignKey
对象,这既可以减少省略表的SQL开销,也可以避免由于特定于数据库的原因而无法反映的表。二 Table
相同的对象 MetaData
即使两个表的反射是单独发生的,集合仍然可以彼此引用。
References: #4517
[orm] [bug]
改善的行为 orm.with_polymorphic()
与加载程序选项结合使用,尤其是通配符操作以及 orm.load_only()
. 多态对象的目标将更准确,这样实体上的列级选项将正确生效。 #4468 .
References: #4469
[bug] [declarative] [orm]
添加了一些在基于 AbstractConcreteBase
, DeferredReflection
或 AutoMap
在映射准备好使用之前使用,该映射包含类的描述性信息,而不是陷入信息较少的其他故障模式。
References: #4470
[sql] [bug]
完全删除了作为 select()
或 Query
被强制到的对象 text()
自动构造;发出的警告现在是argumenterror,或者在order_by()/group_by()的情况下是compilerError。从1.0版开始,这就发出了一个警告,但是它的存在仍然会引起对这种行为可能被误用的关注。
请注意,已为order_by()/group_by()发布了公共CVE,该提交解决了该问题:CVE-2019-7164 CVE-2019-7548
¶References: #4481
[sql] [bug]
报价适用于 Function
名称,通常但不一定由 sql.func
在编译时构造,如果它们包含非法字符,例如空格或标点符号。但是,这些名称和以前一样被视为不区分大小写,这意味着如果名称包含大写或混合大小写字符,那么仅此一项不会触发引用。目前,为了向后兼容,保持大小写不敏感。
References: #4467
[sql] [bug]
在接受为纯字符串的关键DDL短语中添加了“SQL短语验证”,包括 ForeignKeyConstraint.on_delete
, ForeignKeyConstraint.on_update
, ExcludeConstraint.using
, ForeignKeyConstraint.initially
,对于只需要一系列SQL关键字的区域。任何建议需要引用该短语的非空格字符都将引发 CompileError
. 此更改与作为 #4481 .
References: #4481
[general] [change]
整个库中的一个巨大变化确保所有被标记为已弃用或遗留的对象、参数和行为现在都发出 DeprecationWarning
调用时出现警告。由于python 3解释器现在默认为显示拒绝警告,以及基于tox和pytest等工具的现代测试套件倾向于显示拒绝警告,因此此更改应使您更容易注意哪些API功能已过时。这一变化的一个主要理由是,尽管如此仍能看到现实世界使用的长期不受欢迎的功能最终可以在不久的将来被删除;其中最大的例子是 SessionExtension
和 MapperExtension
类以及一些其他事件前扩展挂钩,这些挂钩自0.7版以来已被弃用,但仍保留在库中。另一个问题是,一些主要的长期行为也将被弃用,包括线程本地引擎策略、convert_unicode标志和非主映射器。
References: #4393
[orm] [feature]
实现了一个新功能 AliasedClass
构造现在可以用作 relationship()
. 这使得“非主映射器”的概念不再是必要的,因为 AliasedClass
更容易配置和自动继承映射类的所有关系,并保留加载程序选项正常工作的能力。
References: #4423
[orm] [feature]
新增 MapperEvents.before_mapper_configured()
事件。此事件用每个映射器事件补充其他“配置”阶段映射器事件,每个映射器事件接收 Mapper
在其配置步骤之前,还可以用来防止或延迟特定 Mapper
使用新返回值的对象 orm.interfaces.EXT_SKIP
. 有关示例,请参见文档链接。
References: #4397
[orm] [bug]
修复了一个长期存在的问题,即在删除某个重复的集合成员时,重复的集合成员将导致backref删除该成员与其父对象之间的关联,这是在一条语句中交换两个对象的副作用。
¶References: #1103
[orm] [bug]
扩展了作为 #3287 ,其中对使用通配符的子类所做的加载程序选项将自身扩展到包括将通配符应用到父类上的属性,以及“绑定”加载程序选项,例如在类似表达式中 Load(SomeSubClass).load_only('foo')
. 属于的父类的列 SomeSubClass
也将以同样的方式排除,如同未绑定选项 load_only('foo')
使用。
References: #4373
[orm] [bug]
改进了ORM在加载程序选项遍历区域中发出的错误消息。这包括早期发现不匹配的加载程序策略,以及更清楚地解释为什么这些策略不匹配。
¶References: #4433
[orm] [bug]
集合的“移除”事件现在在移除项之前调用,如果 collection.remove()
方法,与大多数其他形式的集合项移除(例如 __delitem__
,更换 __setitem__
)为了 pop()
方法,移除事件在操作后仍将激发。
[orm] [bug] [engine]
为核心和ORM的执行选项添加了访问器,通过 Query.get_execution_options()
, Connection.get_execution_options()
, Engine.get_execution_options()
和 Executable.get_execution_options()
. 公关人员:Daniel Lister。
References: #4464
[orm] [bug]
由于以下原因,关联代理中的固定问题 #3423 这导致了习俗的使用 PropComparator
具有混合属性的对象,例如 dictlike-polymorphic
在关联代理中不起作用的示例。增加的严格性 #3423 已经放宽了,并且添加了附加逻辑以适应链接到自定义混合的关联代理。
References: #4446
[orm] [bug]
实现了 .get_history()
方法,也意味着 AttributeState.history
,为了 synonym()
属性。以前,尝试通过同义词访问属性历史记录会引发 AttributeError
.
References: #3777
[orm] [change]
添加了一个新函数 close_all_sessions()
它接管了 Session.close_all()
方法,现在已弃用,因为它会混淆为类方法。拉请求由奥古斯汀·特兰卡特提供。
References: #4412
[orm declarative] [bug]
增加了一个 __clause_element__()
方法到 ColumnProperty
它允许在声明性映射类中使用未完全声明的列或延迟属性,当在类声明中的约束或其他面向列的方案中使用时,稍微友好一些,尽管这在开放式表达式中仍然不起作用;更喜欢调用 ColumnProperty.expression
接收时的属性 TypeError
.
References: #4372
[sql] [feature]
修正了 AnsiFunction
类,普通SQL函数的基础,如 CURRENT_TIMESTAMP
,接受位置参数,如常规特殊函数。为了适应这种情况,在特定后端的许多函数接受诸如“小数秒”精度之类的参数。如果函数是用参数创建的,它将呈现圆括号和参数。如果没有参数存在,编译器将生成非括号形式。
References: #4386
[sql] [change]
这个 create_engine.convert_unicode
和 String.convert_unicode
参数已被弃用。这些参数是在大多数python dbapis几乎不支持python unicode对象时构建的,而sqlAlchemy需要承担非常复杂的任务,即以一种执行方式在整个系统中的unicode和bytestrings之间对数据和SQL字符串进行编组。多亏了python 3,dbapis不得不适应Unicode感知的API,而现在所有由SQLAlchemy支持的dbapi都支持Unicode,包括python 2,这使得这个长期存在且非常复杂的特性最终(大部分)被删除。当然,还有一些python 2边缘案例中,SQLAlchemy必须处理unicode,但是这些都是自动处理的;在现代使用中,不需要最终用户与这些标志进行交互。
References: #4393
[mssql] [bug]
这个 literal_processor
对于 Unicode
和 UnicodeText
数据类型现在呈现 N
SQL Server对SQL表达式中呈现的Unicode字符串值所要求的文本字符串表达式前面的字符。
References: #4442
[orm] [feature]
添加了新功能 Query.only_return_tuples()
. 导致 Query
对象无条件返回键化的元组对象,即使查询是针对单个实体的。拉请求提供埃里克阿特金。
This change is also backported to: 1.2.5
[orm] [feature]
增加新标志 Session.bulk_save_objects.preserve_order
到 Session.bulk_save_objects()
方法,默认为true。当设置为false时,给定的映射将按每个对象类型分组为插入和更新,以允许更多机会一起批处理公共操作。拉车请求,由亚历山德罗·库奇提供。
[orm] [feature]
“selectin”加载程序策略现在在简单的一对多加载的情况下省略了join,在这种情况下它只依赖相关表中的加载,而依赖相关表的外键列来匹配父表中的主键。可以通过设置 relationship.omit_join
标记为false。非常感谢杰森·里斯在这方面所做的努力。
References: #4340
[orm] [feature]
补充 .info
字典到 InstanceState
类,来自调用的对象 inspect()
在映射的对象上。
References: #4257
[orm] [bug]
修复了使用 Lateral
与 Query.join()
以及 Query.select_entity_from()
不会将子句自适应应用于联接的右侧。”横向”介绍了连接右侧的可关联用例。在此之前,不考虑对该条款的修改。注意,仅在1.2中,由 Query.subquery()
由于 #4304 ;可选的需要由 select()
功能是“横向”连接的右侧。
This change is also backported to: 1.2.12
References: #4334
[orm] [bug]
修正了被动删除“all”的问题,即即使从父集合中删除了某个对象后,该对象的外键属性仍保持其值。以前,工作单元会将其设置为空,即使被动删除指示不应修改它。
¶References: #3844
[orm] [bug]
改进了将多对一对象表达式绑定在一起的关系的行为,这样,对相关对象上的列值的检索现在可以针对从其父对象分离的对象进行恢复。 Session
,即使属性已过期。中的新功能 InstanceState
用于在某个特定列属性的最后一个已知值过期之前对其进行memoize,以便表达式仍然可以在对象同时分离和过期时对其进行计算。使用现代属性状态特性,还可以根据需要改进错误条件,以生成更具体的消息。
References: #4359
[orm] [bug] [mysql] [postgresql]
ORM现在将子查询中的“for update”子句加倍,该子句在某些情况下与joined eager loading一起呈现,正如我们观察到的那样,MySQL不会锁定子查询中的行。这意味着查询使用两个for update子句呈现;请注意,在某些后端(如Oracle)上,子查询的for update子句被静默忽略,因为它们是不必要的。此外,对于主要与PostgreSQL一起使用的“of”子句,仅当使用for update时,才会在内部子查询上呈现for update,以便可选择项可以针对select语句中的表。
¶References: #4246
[orm] [bug]
重构的 Query.join()
进一步阐明构造连接的各个组件。此重构添加了 Query.join()
当FROM列表中有多个元素或查询针对多个实体时,确定联接最合适的“左侧”。如果有多个from/entity匹配,则会引发一个错误,要求指定on子句来解决歧义。尤其是我们看到的回归 #4363 但也有普遍的用途。代码路径 Query.join()
现在更容易跟踪,并且错误情况在操作的早期更具体地确定。
References: #4365
[orm] [bug]
解决了长期存在的问题 Query
其中一个标量子查询,如 Query.exists()
, Query.as_scalar()
以及其他来源 Query.statement
当用于新的 Query
这需要实体适应,例如当查询被转换为联合时,或者从_Self()中转换为a时,更改会从 select()
对象由 Query.statement
访问器。
References: #4304
[orm] [bug]
当在python 3下的ORM刷新期间,主键值在python中不可排序时,会重新引发一个信息性异常,例如 Enum
那没有 __lt__()
方法;通常python 3会引发 TypeError
在这种情况下。刷新过程按python中的主键对持久对象排序,因此值必须是可排序的。
References: #4232
[orm] [bug]
已删除由 MappedCollection
班级。此转换器仅用于断言传入的字典键与其对应对象的字典键匹配,并且仅在批量设置操作期间使用。转换器可能会干扰自定义验证器或 AttributeEvents.bulk_replace()
希望进一步转换传入值的侦听器。这个 TypeError
当传入密钥与值不匹配时,此转换器将引发此问题;在大容量分配期间传入的值将被键入其值生成的密钥,而不是字典中显式存在的密钥。
总之,@转换器被 AttributeEvents.bulk_replace()
作为的一部分添加的事件处理程序 #3896 .
References: #3604
[orm] [bug]
向延迟加载添加了新的行为,当多对一的“旧”值被检索时,会发生这种情况,这样,由于 lazy="raise"
或者跳过分离的会话错误。
References: #4353
[orm] [bug]
ORM中长期存在的监督 __delete__
多对一关系的方法是不起作用的,例如对于诸如 del a.b
. 这现在实现,相当于将属性设置为 None
.
References: #4354
[engine] [feature]
将新的“后进先出”模式添加到 QueuePool
,通常通过设置标志启用 create_engine.pool_use_lifo
是真的。”“后进先出”模式意味着刚签入的相同连接将是第一个再次签出的连接,允许在仅部分使用池期间从服务器端清除多余的连接。拉车请求由Taem Park提供。
参见
[sql] [feature]
重构的 SQLCompiler
揭发 SQLCompiler.group_by_clause()
方法类似于 SQLCompiler.order_by_clause()
和 SQLCompiler.limit_clause()
方法,可由方言重写以自定义Group By呈现方式。拉请求礼遇塞缪尔周。
This change is also backported to: 1.2.13
[sql] [feature]
补充 Sequence
到将呈现有意义字符串表达式的“字符串SQL”系统 ("<next sequence value: my_sequence>"
)在没有方言的情况下进行字符串化时,包含“sequence nextvalue”表达式的语句,而不是引发编译错误。
References: #4144
[sql] [feature]
添加了新的命名约定标记 column_0N_name
, column_0_N_name
等,它将呈现特定约束在序列中引用的所有列的名称/键/标签。为了适应这种命名约定的长度,SQL编译器的自动截断功能现在也应用于约束名称,它为约束创建了一个缩短的、确定生成的名称,该名称将应用于目标后端,而不超过该后端的字符限制。
这一变化还修复了另外两个问题。一个是 column_0_key
令牌不可用,即使记录了此令牌,另一个是 referred_column_0_name
令牌将不经意地呈现 .key
而不是 .name
如果这两个值不同,则返回该列。
References: #3989
[sql] [feature]
向“expanding in”绑定参数功能添加了新的逻辑,这样,如果给定的列表为空,则会生成一个特定于不同后端的特殊“empty set”表达式,从而允许in表达式是完全动态的,包括表达式中的空表达式。
参见
References: #4271
[sql] [feature]
Python 内置 dir()
现在支持SQLAlchemy“属性”对象,例如核心列集合(例如 .c
) mapper.attrs
等等,也允许ipython自动完成。拉请求由Uwe Korn提供。
[sql] [feature]
添加了新功能 FunctionElement.as_comparison()
它允许SQL函数充当可以在ORM中工作的二进制比较操作。
References: #3831
[sql] [bug]
添加基于“like”的运算符作为“comparison”运算符,包括 ColumnOperators.startswith()
ColumnOperators.endswith()
ColumnOperators.ilike()
ColumnOperators.notilike()
因此,所有这些运算符都可以作为ORM“primaryjoin”条件的基础。
References: #4302
[sql] [bug]
已修复问题 TypeEngine.bind_expression()
和 TypeEngine.column_expression()
如果目标类型是 Variant
或其他目标类型 TypeDecorator
. 此外,SQL编译器现在在呈现这些方法时调用方言级别的实现,以便方言现在可以为内置类型提供SQL级别的处理。
References: #3981
[postgresql] [feature]
添加了新的PG类型 postgresql.REGCLASS
这有助于将表名转换为OID值。拉请求由塞巴斯蒂安银行提供。
This change is also backported to: 1.2.7
References: #4160
[postgresql] [feature]
添加了对PostgreSQL分区表反射的基本支持,例如将relkind='p'添加到返回表信息的反射查询中。
¶References: #4237
[mysql] [feature]
在mysql中添加了对create fulltext index的“with parser”语法的支持,使用 mysql_with_parser
关键字参数。反射也被支持,它适应了MySQL的特殊注释格式,用于报告这个选项。此外,“全文”和“空间”索引前缀现在反射回 mysql_prefix
索引选项。
References: #4219
[mysql] [feature]
在mysql上添加了对要排序的on-duplicate key update语句中参数的支持,因为mysql update子句中的参数顺序非常重要,与中描述的方式类似 参数顺序更新 . 拉请求由Maxim Bublis提供。
¶[mysql] [feature]
连接池的“预ping”功能现在使用 ping()
对于mysqlclient、pymysql和mysql connector python,dbapi连接的方法。拉请求由Maxim Bublis提供。
[sqlite] [feature]
通过新的sqlite实现增加了对sqlite的json功能的支持 types.JSON
, sqlite.JSON
. 用于类型的名称是 JSON
,以下是在sqlite自己的文档中找到的示例。拉请求由Ilja Everil_。
References: #3850
[sqlite] [feature]
实现了sqlite ON CONFLICT
在DDL级别理解的子句,例如主键、唯一和检查约束,以及在 Column
满足内联主键而不是空值。拉请求礼貌丹尼斯卡塔耶夫。
References: #4360
[mssql] [feature]
补充 fast_executemany=True
SQL Server pyodbc方言的参数,该参数允许在使用Microsoft ODBC驱动程序时使用pyodbc的同名新性能功能。
References: #4158
[mssql] [bug]
已弃用 Sequence
用SQL Server来影响标识值的“开始”和“增量”,有利于新参数 mssql_identity_start
和 mssql_identity_increment
直接设置这些参数。 Sequence
将用于生成真实 CREATE SEQUENCE
在将来的版本中使用SQL Server进行DDL。
References: #4362
[oracle] [feature]
添加了一个当前仅由cx_Oracle方言使用的新事件, DialectEvents.setiputsizes()
. 事件传递的字典 BindParameter
对象到DBAPI特定类型的对象,这些对象在转换为参数名后将传递到cx_Oracle cursor.setinputsizes()
方法。这既允许查看setinputsizes进程,也允许更改传递给此方法的数据类型的行为。
This change is also backported to: 1.2.9
References: #4290
[oracle] [bug]
更新了可以发送到cx_Oracle DBAPI的参数,以允许所有当前参数以及尚未添加的未来参数。此外,删除了版本1.2中不推荐使用的未使用参数,此外,我们现在将“threaded”默认为false。
¶References: #4369
[oracle] [bug]
Oracle方言将不再使用nchar/nclob数据类型表示通用的Unicode字符串或CLOB字段以及 Unicode
和 UnicodeText
除非国旗 use_nchar_for_unicode=True
传递给 create_engine()
-这包括创建表行为以及 setinputsizes()
对于绑定参数。在读取端,python 2下的自动unicode转换被添加到char/varchar/clob结果行中,以匹配python 3下的cx_Oracle行为。为了减轻在python 2下的性能损失,在python 2下使用了sqlachemy的非常高性能(在构建C扩展时)本机Unicode处理程序。
References: #4242
[feature] [ext]
添加了新属性 Query.lazy_loaded_from
其中填充了 InstanceState
用这个吗 Query
为了偷懒加载关系。其基本原理是,它可以作为水平切分功能使用的提示,这样状态的标识令牌就可以用作ID_Chooser()中用于查询的默认标识令牌。
This change is also backported to: 1.2.9
References: #4243
[feature] [ext]
添加了新功能 BakedQuery.to_query()
,允许使用一种干净的方法 BakedQuery
作为另一个内部的子查询 BakedQuery
无需明确提及 Session
.
References: #4318
[feature] [ext]
这个 AssociationProxy
现在有了标准的列比较操作,例如 ColumnOperators.like()
和 ColumnOperators.startswith()
当目标属性是纯列时可用-联接到目标表的exists表达式将照常呈现,但列表达式随后将在的where条件内使用。注意,这会改变 .contains()
关联代理上要使用的方法 ColumnOperators.contains()
在基于列的属性上使用时。
References: #4351
[feature] [ext]
增加了对批量的支持 Query.update()
和 Query.delete()
到 ShardedQuery
在水平切分扩展中初始化。这还为批量更新/删除方法添加了一个额外的扩展挂钩。 Query._execute_crud()
.
References: #4196
[bug] [ext]
返工 AssociationProxy
将特定于父类的状态存储在单独的对象中,以便 AssocationProxy
可以为多个父类提供服务,这是继承的固有特性,它返回的状态没有任何模糊性。一种新方法 AssociationProxy.for_class()
添加以允许检查特定于类的状态。
References: #3423
[bug] [ext]
只保留对父对象弱引用的关联代理集合的长期行为将被还原;只要代理集合本身也在内存中,代理现在将保持对父对象的强引用,从而消除“过时的关联代理”错误。这种改变是在实验的基础上进行的,目的是看看是否有任何用例在产生副作用的地方出现。
参见
References: #4268
[bug] [ext]
修复了有关标量对象与关联代理取消关联的多个问题。 del
现在起作用了,另外还有一个新的标志 AssociationProxy.cascade_scalar_deletes
添加,当设置为true时,表示将标量属性设置为 None
或通过删除 del
也将源关联设置为 None
.
References: #4308