2.0.42
2.0.42
Released: July 29, 2025
orm
-
[orm] [usecase] Added
dataclass_metadataargument 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 dataclassmetadataattribute
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 theValuesBase.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-columnsCTEagainst an
unnamedVALUESexpression, producing a syntax that allows column-oriented
selection from aVALUESconstruct 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 notationjsonb_col['key']instead of the arrow operator
jsonb_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_opskey to thedialect_optionsentry 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
CancelledErrorin 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 inintervalas anINTERVALtype 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.columnsview. 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 previouslyReferences: #12654