Skip to content

2.0.42

Choose a tag to compare

@sqla-tester sqla-tester released this 29 Jul 12:48
· 1371 commits to main since this release

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 dataclass metadata 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-columns CTE against an
    unnamed VALUES expression, producing a syntax that allows column-oriented
    selection from a VALUES 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 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_ops key to the dialect_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 an INTERVAL 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 than information_schema.columns view. By correctly using
    the SQL Server object_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