Skip to content

2.0.24

Compare
Choose a tag to compare
@sqla-tester sqla-tester released this 28 Dec 16:23
· 341 commits to main since this release

2.0.24

Released: December 28, 2023

orm

  • [orm] [bug] Improved a fix first implemented for #3208 released in version
    0.9.8, where the registry of classes used internally by declarative could
    be subject to a race condition in the case where individual mapped classes
    are being garbage collected at the same time while new mapped classes are
    being constructed, as can happen in some test suite configurations or
    dynamic class creation environments. In addition to the weakref check
    already added, the list of items being iterated is also copied first to
    avoid "list changed while iterating" errors. Pull request courtesy Yilei
    Yang.

    This change is also backported to: 1.4.51

    References: #10782

  • [orm] [bug] Fixed issue where use of _orm.foreign() annotation on a
    non-initialized _orm.mapped_column() construct would produce an
    expression without a type, which was then not updated at initialization
    time of the actual column, leading to issues such as relationships not
    determining use_get appropriately.

    References: #10597

  • [orm] [bug] Improved the error message produced when the unit of work process sets the
    value of a primary key column to NULL due to a related object with a
    dependency rule on that column being deleted, to include not just the
    destination object and column name but also the source column from which
    the NULL value is originating. Pull request courtesy Jan Vollmer.

    References: #10668

  • [orm] [bug] Modified the __init_subclass__() method used by
    _orm.MappedAsDataclass, _orm.DeclarativeBase and
    _orm.DeclarativeBaseNoMeta to accept arbitrary **kw and to
    propagate them to the super() call, allowing greater flexibility in
    arranging custom superclasses and mixins which make use of
    __init_subclass__() keyword arguments. Pull request courtesy Michael
    Oliver.

    References: #10732

  • [orm] [bug] Ensured the use case of Bundle objects used in the
    returning() portion of ORM-enabled INSERT, UPDATE and DELETE statements
    is tested and works fully. This was never explicitly implemented or
    tested previously and did not work correctly in the 1.4 series; in the 2.0
    series, ORM UPDATE/DELETE with WHERE criteria was missing an implementation
    method preventing Bundle objects from working.

    References: #10776

  • [orm] [bug] Fixed 2.0 regression in MutableList where a routine that detects
    sequences would not correctly filter out string or bytes instances, making
    it impossible to assign a string value to a specific index (while
    non-sequence values would work fine).

    References: #10784

engine

  • [engine] [bug] Fixed URL-encoding of the username and password components of
    engine.URL objects when converting them to string using the
    _engine.URL.render_as_string() method, by using Python standard
    library urllib.parse.quote while allowing for plus signs and spaces to
    remain unchanged as supported by SQLAlchemy's non-standard URL parsing,
    rather than the legacy home-grown routine from many years ago. Pull request
    courtesy of Xavier NUNN.

    References: #10662

sql

  • [sql] [bug] Fixed issue in stringify for SQL elements, where a specific dialect is not
    passed, where a dialect-specific element such as the PostgreSQL "on
    conflict do update" construct is encountered and then fails to provide for
    a stringify dialect with the appropriate state to render the construct,
    leading to internal errors.

    References: #10753

  • [sql] [bug] Fixed issue where stringifying or compiling a CTE that was
    against a DML construct such as an _sql.insert() construct would fail
    to stringify, due to a mis-detection that the statement overall is an
    INSERT, leading to internal errors.

schema

  • [schema] [bug] Fixed issue where error reporting for unexpected schema item when creating
    objects like _schema.Table would incorrectly handle an argument
    that was itself passed as a tuple, leading to a formatting error. The
    error message has been modernized to use f-strings.

    References: #10654

typing

  • [typing] [bug] Completed pep-484 typing for the sqlalchemy.sql.functions module.
    _sql.select() constructs made against func elements should now
    have filled-in return types.

    References: #6810

asyncio

  • [asyncio] [change] The async_fallback dialect argument is now deprecated, and will be
    removed in SQLAlchemy 2.1. This flag has not been used for SQLAlchemy's
    test suite for some time. asyncio dialects can still run in a synchronous
    style by running code within a greenlet using _util.greenlet_spawn().

postgresql

  • [postgresql] [bug] Adjusted the asyncpg dialect such that when the terminate() method is
    used to discard an invalidated connection, the dialect will first attempt
    to gracefully close the connection using .close() with a timeout, if
    the operation is proceeding within an async event loop context only. This
    allows the asyncpg driver to attend to finalizing a TimeoutError
    including being able to close a long-running query server side, which
    otherwise can keep running after the program has exited.

    References: #10717

mysql

  • [mysql] [bug] Fixed regression introduced by the fix in ticket #10492 when using
    pool pre-ping with PyMySQL version older than 1.0.

    This change is also backported to: 1.4.51

    References: #10650

  • [mysql] [bug] Fixed regression introduced by the fix in ticket #10492 when using
    pool pre-ping with PyMySQL version older than 1.0.

    This change is also backported to: 1.4.51

    References: #10650

tests

  • [tests] [bug] Improvements to the test suite to further harden its ability to run
    when Python greenlet is not installed. There is now a tox
    target that includes the token "nogreenlet" that will run the suite
    with greenlet not installed (note that it still temporarily installs
    greenlet as part of the tox config, however).

    References: #10747