2.0.42
Released: July 29, 2025
orm
-
[orm] [usecase] Added
dataclass_metadata
argument to all ORM attribute constructors that accept dataclasses parameters, e.g.mapped_column.dataclass_metadata
,relationship.dataclass_metadata
, etc. It's passed to the underlying dataclassmetadata
attribute of the dataclass field. Pull request courtesy Sigmund Lahn.References: #10674
-
[orm] [bug] Implemented the
_orm.defer()
,_orm.undefer()
and_orm.load_only()
loader options to work for composite attributes, a use case that had never been supported previously.References: #12593
-
[orm] [bug] Fixed bug where the ORM would pull in the wrong column into an UPDATE when a key name inside of the
ValuesBase.values()
method could be located from an ORM entity mentioned in the statement, but where that ORM entity was not the actual table that the statement was inserting or updating. An extra check for this edge case is added to avoid this problem.References: #12692
engine
- [engine] Improved validation of execution parameters passed to the
_engine.Connection.execute()
and similar methods to provided a better error when tuples are passed in. Previously the execution would fail with a difficult to understand error message.
sql
-
[sql] [usecase] The
_sql.values()
construct gains a new method_sql.Values.cte()
, which allows creation of a named, explicit-columnsCTE
against an unnamedVALUES
expression, producing a syntax that allows column-oriented selection from aVALUES
construct on modern versions of PostgreSQL, SQLite, and MariaDB.References: #12734
-
[sql] [bug] Fixed issue where
select()
of a free-standing scalar expression that has a unary operator applied, such as negation, would not apply result processors to the selected column even though the correct type remains in place for the unary expression.References: #12681
-
[sql] [bug] Hardening of the compiler's actions for UPDATE statements that access multiple tables to report more specifically when tables or aliases are referenced in the SET clause; on cases where the backend does not support secondary tables in the SET clause, an explicit error is raised, and on the MySQL or similar backends that support such a SET clause, more specific checking for not-properly-included tables is performed. Overall the change is preventing these erroneous forms of UPDATE statements from being compiled, whereas previously it was relied on the database to raise an error, which was not always guaranteed to happen, or to be non-ambiguous, due to cases where the parent table included the same column name as the secondary table column being updated.
References: #12692
postgresql
-
[postgresql] [usecase] Added support for PostgreSQL 14+ JSONB subscripting syntax. When connected to PostgreSQL 14 or later, JSONB columns now automatically use the native subscript notation
jsonb_col['key']
instead of the arrow operatorjsonb_col -> 'key'
for both read and write operations. This provides better compatibility with PostgreSQL's native JSONB subscripting feature while maintaining backward compatibility with older PostgreSQL versions. JSON columns continue to use the traditional arrow syntax regardless of PostgreSQL version.References: #10927
-
[postgresql] [usecase] Added
postgresql_ops
key to thedialect_options
entry in reflected dictionary. This maps names of columns used in the index to respective operator class, if distinct from the default one for column's data type. Pull request courtesy Denis Laxalde.References: #8664
-
[postgresql] [bug] [reflection] Fixed regression caused by #10665 where the newly modified constraint reflection query would fail on older versions of PostgreSQL such as version 9.6. Pull request courtesy Denis Laxalde.
References: #12600
-
[postgresql] [bug] Re-raise catched
CancelledError
in the terminate method of the asyncpg dialect to avoid possible hangs of the code execution.References: #12728
-
[postgresql] [bug] [reflection] Fixes bug that would mistakenly interpret a domain or enum type with name starting in
interval
as anINTERVAL
type while reflecting a table.References: #12744
mysql
-
[mysql] [bug] Fixed yet another regression caused by by the DEFAULT rendering changes in 2.0.40 #12425, similar to #12488, this time where using a CURRENT_TIMESTAMP function with a fractional seconds portion inside a textual default value would also fail to be recognized as a non-parenthesized server default.
References: #12648
mssql
- [mssql] [bug] Reworked SQL Server column reflection to be based on the
sys.columns
table rather thaninformation_schema.columns
view. By correctly using the SQL Serverobject_id()
function as a lead and joining to related tables on object_id rather than names, this repairs a variety of issues in SQL Server reflection, including:- Issue where reflected column comments would not correctly line up with the columns themselves in the case that the table had been ALTERed - Correctly targets tables with awkward names such as names with brackets, when reflecting not just the basic table / columns but also extended information including IDENTITY, computed columns, comments which did not work previously - Correctly targets IDENTITY, computed status from temporary tables which did not work previously
References: #12654