Skip to content

Scheduled weekly dependency update for week 11#850

Closed
pyup-bot wants to merge 33 commits intomasterfrom
pyup-scheduled-update-2026-03-16
Closed

Scheduled weekly dependency update for week 11#850
pyup-bot wants to merge 33 commits intomasterfrom
pyup-scheduled-update-2026-03-16

Conversation

@pyup-bot
Copy link
Copy Markdown
Collaborator

Update gevent from 21.1.2 to 25.9.1.

Changelog

25.9.1

===================


Features
--------

- gevent is now tested on PyPy 3.11 v7.3.20. Previously it was tested
with the now end-of-life PyPy 3.10 v7.3.17.



Bugfixes
--------

- Fix a ``TypeError`` in the C extensions when attempting to put items
into a full ``SimpleQueue.``

It is believed this problem started in version 25.4.1. On older
versions, using the environment variable ``PURE_PYTHON`` or
``GEVENT_PURE_PYTHON`` works around
See :issue:`2139`.

25.8.2

===================


Bugfixes
--------

- Make the ``queue`` attribute of ``gevent.queue.Queue`` objects
writable from Python when the C extension is in use. When
monkey-patched, this lets subclasses assign to it from their ``_init``
method. (Prior to 25.8.1 the ``_init`` method simply wasn't called.)
See :issue:`2136`.

25.8.1

===================


Features
--------

- gevent is now tested on the latest available versions of Python:
3.14rc1, 3.13.5, 3.12.11, 3.11.13, and 3.10.18.

We expect to remove support for Python 3.9 soon.



Bugfixes
--------

- Prevent an ``AssertionError`` (from ``AbstractLinkable``, such as
locks, events, etc) from being printed after ``os.fork`` under certain
conditions.

See also :issue:`2058`.
See :issue:`1895`.
- Avoid a rare ``AttributeError`` that could occur during circular
garbage collection.
See :issue:`1961`.
- Update c-ares from 1.33.1 to 1.34.5.

This contains `a bug fix <https://github.com/c-ares/c-ares/pull/974>`_
resolving excess CPU usage for certain platforms.
See :issue:`2084`.
- Fix several possible interpreter crashes when there are race
conditions or programmers don't follow the documented rules and close
open files while they are still in use by other components.

For example, :meth:`selectors.BaseSelector.unregister` says "A file
object shall be unregistered prior to being closed." Failure to do so
is implementation dependent; in gevent, with libev compiled with
debugging enabled, this would crash the process, and with libuv,
an unexpected, uncatchable exception would be raised. Now, more common
failure scenarios are handled gracefully.

This also means that gevent now monkey-patches :func:`os.close` (on
POSIX) to help handle these cases.
See :issue:`2100`.
- Fix some ignored AssertionErrors after forking on older versions of
Python.

See also :issue:`2111`.
See :issue:`2111`.
- Make the classes in ``gevent.queue`` more compatible with classes that
expect to subclass the standard library queue classes.
See :issue:`2114`.
- Provide ``gevent.signal.set_wakeup_fd`` (monkey-patched by default) to
allow waking up on ``SIGCHLD``. Previously, gevent's internal handling
of ``SIGCHLD`` prevented this from working.
See :issue:`2126`.

25.5.1

===================


Features
--------

- Update the bundled libuv to 1.51 from 1.44.2.

Note that this changes the minimum supported versions of various
operating systems. Linux now requires kernel 3.10 and glibc 2.17, up
from 2.6.32 and glibc 2.12; macOS now requires version 11, up from
version 10.15; Windows now requires Windows 10 and Visual Studio 2017,
up from Windows 8 and VS 2015; finally, FreeBSD now requires version
12, up from version 10.

The musl Linux wheels are now built with muslinux_1_2 instead of
musllinux_1_1.
See :issue:`2108`.
- Add support for Cython 3.1 on Windows.

- Add support for Python 3.14b1 and significantly expand the set of
standard library tests we run with monkey-patching.

25.4.2

===================


Features
--------

- Make gevent's ``queue`` classes subscriptable to match the standard library.
See :issue:`2102`.
- Make the c-ares resolver build on Windows.

25.4.1

===================


Features
--------

- Add a new environment variable and configuration setting to control
whether blocking reports are printed by the monitor thread.
See :issue:`2070`.
- Add initial support for Python 3.14a7. Earlier and later versions of
Python 3.14 may or may not work as expected.



Bugfixes
--------

- Fix using gevent's BackdoorServer with Unix sockets.
See :issue:`1769`.
- Monkey-patching the ``queue`` module (done by default in
``patch_all``) now patches ``Queue``, ``PriorityQueue``, and
``LifoQueue``. In addition to the general benefits of making all those
classes cooperative, this is known to solve a non-deterministic
deadlock with ``urllib3``.

In addition, ``Queue`` was renamed to ``SimpleQueue``; previously
``SimpleQueue`` was an alias for the undocumented
``queue._PySimpleQueue``. This makes ``SimpleQueue`` cooperative even
without monkey-patching.

Likewise, ``JoinableQueue`` was renamed to ``Queue``, providing the
``join`` method to all ``Queue`` objects, thus matching the standard
library. The old name remains for backwards compatibility.
See :issue:`1957`.

.. caution::
  Only the documented, tested (by the standard library), attributes are identical between
  the standard library and gevent ``Queue`` implementations.
  Internal implementation details are very different, and using
  undocumented, untested details such as the internal ``Condition``
  object ``all_tasks_done`` instead of the documented, tested
  ``join`` method will fail with this change.

  If you have code that relies on undocumented implementation
  details that cannot bo ported to the documented interface, please
  file an issue.


- Do not assume that ``threading.get_native_id`` exists. This improves
support for untested platforms.
See :issue:`2053`.
- Do not use pywsgi in a security-conscious environment.

Fix one security issue related to HTTP 100 Continue handling.
See :issue:`2075`.

24.11.1

====================


Bugfixes
--------

- Remove some legacy code that supported Python 2 for compatibility with
the upcoming releases of Cython 3.1.

Also, the ``PeriodicMonitorThreadStartedEvent`` now properly
implements the ``IPeriodicMonitorThreadStartedEvent`` interface.
The ``EventLoopBlocked`` event includes the hub which was blocked,
and it is notified before the report is printed so that event
listeners can modify the report.
See :issue:`2076`.

24.10.3

====================


Bugfixes
--------

- Fix clearing stack frames on Python 3.13. This is invoked when you
fork after having used the thread pool.
See :issue:`2067`.
- Distribute manylinux2014 wheels for x86_64.
See :issue:`2068`.
- Stop switching to the hub in the after fork hook in a child process. This could lead to strange behaviour, and is different than what all other versions of Python do.

24.10.2

====================


Bugfixes
--------

- Workaround a Cython bug compiling on GCC14.
See :issue:`2049`.

24.10.1

====================


Features
--------

- Update the bundled c-ares to 1.33.1.

- Add support for Python 3.13.

- The functions and classes in ``gevent.subprocess`` no longer accept
 ``stdout=STDOUT`` and raise a ``ValueError``.

Several additions and changes to the ``queue`` module, including:

- ``Queue.shutdown`` is available on all versions of Python.
- ``LifoQueue`` is now a joinable queue.

- gevent.monkey changed from a module to a package. The public API
remains the same.

For this release, private APIs (undocumented, marked internal, or
beginning with an underscore) are also preserved. However, these may
be changed or removed at any time in the future. If you are using one
of these APIs and cannot replace it, please contact the gevent team.



Bugfixes
--------

- For platforms that don't have ``socketpair``, upgrade our fallback
code to avoid a security issue.
See :issue:`2048`.


Deprecations and Removals
-------------------------

- Remove support for Python 3.8, which has reached the end of its
support lifecycle.
See :issue:`remove_py38`.

24.2.1

===================


Bugfixes
--------

- Add support for Python patch releases 3.11.8 and 3.12.2, which changed
internal details of threading.

As a result of these changes, note that it is no longer possible to
change the ``__class__`` of a ``gevent.threading._DummyThread``
object on those versions.

See :issue:`2020`.

Other
-----

Other updates for compatibility with the standard library include:

- Errors raised from ``subprocess.Popen`` may not have a filename set.
- ``SSLSocket.recv_into`` and ``SSLSocket.read`` no longer require the
 buffer to implement ``len`` and now work with buffers whose size is
 not 1.
- gh-108310: Fix CVE-2023-40217: Check for & avoid the ssl pre-close
 flaw.

In addition:

- Drop ``setuptools`` to a soft test dependency.
- Drop support for very old versions of CFFI.
- Update bundled c-ares from 1.19.1 to 1.26.0.
- Locks created by gevent, but acquired from multiple different
 threads (not recommended), no longer spin to implement timeouts
 and interruptible blocking. Instead, they use the native
 functionality of the Python 3 lock. This may improve some scenarios.
 See :issue:`2013`.

23.9.1

===================


Bugfixes
--------

- Require greenlet 3.0 on Python 3.11 and Python 3.12; greenlet 3.0 is
recommended for all platforms. This fixes a number of obscure crashes
on all versions of Python, as well as fixing a fairly common problem
on Python 3.11+ that could manifest as either a crash or as a
``SystemError``.
See :issue:`1985`.


----

23.9.0.post1

=========================

- Fix Windows wheel builds.
- Fix macOS wheel builds.

23.9.0

===================


Bugfixes
--------

- Make ``gevent.select.select`` accept arbitrary iterables, not just
sequences. That is, you can now pass in a generator of file
descriptors instead of a realized list. Internally, arbitrary
iterables are copied into lists. This better matches what the standard
library does. Thanks to David Salvisberg.
See :issue:`1979`.
- On Python 3.11 and newer, opt out of Cython's fast exception
manipulation, which *may* be causing problems in certain circumstances
when combined with greenlets.

On all versions of Python, adjust some error handling in the default
C-based loop. This fixes several assertion failures on debug versions
of CPython. Hopefully it has a positive impact under real conditions.
See :issue:`1985`.
- Make ``gevent.pywsgi`` comply more closely with the HTTP specification
for chunked transfer encoding. In particular, we are much stricter
about trailers, and trailers that are invalid (too long or featuring
disallowed characters) forcibly close the connection to the client
*after* the results have been sent.

Trailers otherwise continue to be ignored and are not available to the
WSGI application.

Previously, carefully crafted invalid trailers in chunked requests on
keep-alive connections might appear as two requests to
``gevent.pywsgi``. Because this was handled exactly as a normal
keep-alive connection with two requests, the WSGI application should
handle it normally. However, if you were counting on some upstream
server to filter incoming requests based on paths or header fields,
and the upstream server simply passed trailers through without
validating them, then this embedded second request would bypass those
checks. (If the upstream server validated that the trailers meet the
HTTP specification, this could not occur, because characters that are
required in an HTTP request, like a space, are not allowed in
trailers.) CVE-2023-41419 was reserved for this.

Our thanks to the original reporters, Keran Mu
(mkr22mails.tsinghua.edu.cn) and Jianjun Chen
(jianjuntsinghua.edu.cn), from Tsinghua University and Zhongguancun
Laboratory.
See :issue:`1989`.


----

23.7.0

===================


Features
--------

- Add preliminary support for Python 3.12, using greenlet 3.0a1. This
is somewhat tricky to build from source at this time, and there is
one known issue: On Python 3.12b3, dumping tracebacks of greenlets
is not available.
:issue:`1969`.
- Update the bundled c-ares version to 1.19.1.
See :issue:`1947`.


Bugfixes
--------

- Fix an edge case connecting a non-blocking ``SSLSocket`` that could result
in an AttributeError. In a change to match the standard library,
calling ``sock.connect_ex()`` on a subclass of ``socket`` no longer
calls the subclass's ``connect`` method.

Initial fix by Priyankar Jain.
See :issue:`1932`.
- Make gevent's ``FileObjectThread`` (mostly used on Windows) implement
``readinto`` cooperatively. PR by Kirill Smelkov.
See :issue:`1948`.
- Work around an ``AttributeError`` during cyclic garbage collection
when Python finalizers (``__del__`` and the like) attempt to use
gevent APIs. This is not a recommended practice, and it is unclear if
catching this ``AttributeError`` will fix any problems or just shift
them. (If we could determine the root situation that results in this
cycle, we might be able to solve it.)
See :issue:`1961`.


Deprecations and Removals
-------------------------

- Remove support for obsolete Python versions. This is everything prior
to 3.8.

Related changes include:

- Stop using ``pkg_resources`` to find entry points (plugins).
 Instead, use ``importlib.metadata``.
- Honor ``sys.unraisablehook`` when a callback function produces an
 exception, and handling the exception in the hub *also* produces an
 exception. In older versions, these would be simply printed.
- ``setup.py`` no longer includes the ``setup_requires`` keyword.
 Installation with a tool that understands ``pyproject.toml`` is
 recommended.
- The bundled tblib has been updated to version 2.0.


----

22.10.2

====================


Bugfixes
--------

- Update to greenlet 2.0. This fixes a deallocation issue that required
a change in greenlet's ABI. The design of greenlet 2.0 is intended to
prevent future fixes and enhancements from requiring an ABI change,
making it easier to update gevent and greenlet independently.

.. caution::

  greenlet 2.0 requires a modern-ish C++ compiler. This may mean
  certain older platforms are no longer supported.
  See :issue:`1909`.


----

22.10.1

====================


Features
--------

- Update bundled libuv to 1.44.2.
See :issue:`1913`.


Misc
----

- See :issue:`1898`., See :issue:`1910`., See :issue:`1915`.


----

22.08.0

====================


Features
--------

- Windows: Test and provide binary wheels for PyPy3.7.

Note that there may be issues with subprocesses, signals, and it may
be slow.
See :issue:`1798`.
- Upgrade embedded c-ares to 1.18.1.
See :issue:`1847`.
- Upgrade bundled libuv to 1.42.0 from 1.40.0.
See :issue:`1851`.
- Added preliminary support for Python 3.11 (rc2 and later).

Some platforms may or may not have binary wheels at this time.

.. important:: Support for legacy versions of Python, including 2.7
              and 3.6, will be ending soon. The
              maintenance burden has become too great and the
              maintainer's time is too limited.

              Ideally, there will be a release of gevent compatible
              with a final release of greenlet 2.0 that still
              supports those legacy versions, but that may not be
              possible; this may be the final release to support them.

:class:`gevent.threadpool.ThreadPool` can now optionally expire idle
threads. This is used by default in the implicit thread pool used for
DNS requests and other user-submitted tasks; other uses of a
thread-pool need to opt-in to this.
See :issue:`1867`.


Bugfixes
--------

- Truly disable the effects of compiling with ``-ffast-math``.
See :issue:`1864`.


----

21.12.0

====================


Features
--------

- Update autoconf files for Apple Silicon Macs. Note that while there
are reports of compiling gevent on Apple Silicon Macs now, this is
*not* a tested configuration. There may be some remaining issues with
CFFI on some systems as well.
See :issue:`1721`.
- Build and upload CPython 3.10 binary manylinux wheels.

Unfortunately, this required us to stop building and uploading CPython
2.7 binary manylinux wheels. Binary wheels for 2.7 continue to be
available for Windows and macOS.
See :issue:`1822`.
- Test and distribute musllinux_1_1 wheels.
See :issue:`1837`.
- Update the tested versions of PyPy2 and PyPy3. For PyPy2, there should
be no user visible changes, but for PyPy3, support has moved from
Python 3.6 to Python 3.7.
See :issue:`1843`.


Bugfixes
--------

- Try to avoid linking to two different Python runtime DLLs on Windows.
See :issue:`1814`.
- Stop compiling manylinux wheels with ``-ffast-math.`` This was
implicit in ``-Ofast``, but could alter the global state of the
process. Analysis and fix thanks to Ilya Konstantinov.
See :issue:`1820`.
- Fix hanging the interpreter on shutdown if gevent monkey patching
occurred on a non-main thread in Python 3.9.8 and above. (Note that
this is not a recommended practice.)
See :issue:`1839`.


----

21.8.0

===================


Features
--------

- Update the embedded c-ares from 1.16.1 to 1.17.1.
See :issue:`1758`.
- Add support for Python 3.10rc1 and newer.

As part of this, the minimum required greenlet version was increased
to 1.1.0 (on CPython), and the minimum version of Cython needed to
build gevent from a source checkout is 3.0a9.

Note that the dnspython resolver is not available on Python 3.10.
See :issue:`1790`.
- Update from Cython 3.0a6 to 3.0a9.
See :issue:`1801`.


Misc
----

- See :issue:`1789`.


----
Links

Update sqlalchemy from 2.0.48 to 2.0.48.

Changelog

2.0.48

:released: March 2, 2026

 .. change::
     :tags: bug, engine
     :tickets: 13144

     Fixed a critical issue in :class:`.Engine` where connections created in
     conjunction with the :meth:`.DialectEvents.do_connect` event listeners
     would receive shared, mutable collections for the connection arguments,
     leading to a variety of potential issues including unlimited growth of the
     argument list as well as elements within the parameter dictionary being
     shared among concurrent connection calls.  In particular this could impact
     do_connect routines making use of complex mutable authentication
     structures.

.. changelog::

2.0.47

:released: February 24, 2026

 .. change::
     :tags: bug, orm
     :tickets: 13104

     Fixed issue when using ORM mappings with Python 3.14's :pep:`649` feature
     that no longer requires "future annotations", where the ORM's introspection
     of the ``__init__`` method of mapped classes would fail if non-present
     identifiers in annotations were present.  The vendored ``getfullargspec()``
     method has been amended to use ``Format.FORWARDREF`` under Python 3.14 to
     prevent resolution of names that aren't present.


 .. change::
     :tags: bug, postgresql
     :tickets: 13105

     Fixed an issue in the PostgreSQL dialect where foreign key constraint
     reflection would incorrectly swap or fail to capture ``onupdate`` and
     ``ondelete`` values when these clauses appeared in a different order than
     expected in the constraint definition. This issue primarily affected
     PostgreSQL-compatible databases such as CockroachDB, which may return ``ON
     DELETE`` before ``ON UPDATE`` in the constraint definition string. The
     reflection logic now correctly parses both clauses regardless of their
     ordering.

 .. change::
     :tags: bug, postgresql
     :tickets: 13107

     Fixed issue in the :ref:`engine_insertmanyvalues` feature where using
     PostgreSQL's ``ON CONFLICT`` clause with
     :paramref:`_dml.Insert.returning.sort_by_parameter_order` enabled would
     generate invalid SQL when the insert used an implicit sentinel (server-side
     autoincrement primary key). The generated SQL would incorrectly declare a
     sentinel counter column in the ``imp_sen`` table alias without providing
     corresponding values in the ``VALUES`` clause, leading to a
     ``ProgrammingError`` indicating column count mismatch. The fix allows batch
     execution mode when ``embed_values_counter`` is active, as the embedded
     counter provides the ordering capability needed even with upsert behaviors,
     rather than unnecessarily downgrading to row-at-a-time execution.

 .. change::
     :tags: bug, postgresql
     :tickets: 13110

     Fixed issue where :meth:`_postgresql.Insert.on_conflict_do_update`
     parameters were not respecting compilation options such as
     ``literal_binds=True``.  Pull request courtesy Loïc Simon.


 .. change::
     :tags: bug, sqlite
     :tickets: 13110

     Fixed issue where :meth:`_sqlite.Insert.on_conflict_do_update`
     parameters were not respecting compilation options such as
     ``literal_binds=True``.  Pull request courtesy Loïc Simon.

 .. change::
     :tags: usecase, engine
     :tickets: 13116

     The connection object returned by :meth:`_engine.Engine.raw_connection`
     now supports the context manager protocol, automatically returning the
     connection to the pool when exiting the context.

 .. change::
     :tags: bug, postgresql
     :tickets: 13130

     Fixed issue where :meth:`_postgresql.Insert.on_conflict_do_update`
     using parametrized bound parameters in the ``set_`` clause would fail
     when used with executemany batching. For dialects that use the
     ``use_insertmanyvalues_wo_returning`` optimization (psycopg2),
     insertmanyvalues is now disabled when there is an ON CONFLICT clause.
     For cases with RETURNING, row-at-a-time mode is used when the SET
     clause contains parametrized bindparams (bindparams that receive
     values from the parameters dict), ensuring each row's parameters are
     correctly applied. ON CONFLICT statements using expressions like
     ``excluded.<column>`` continue to batch normally.


 .. change::
     :tags: bug, sqlite
     :tickets: 13130

     Fixed issue where :meth:`_sqlite.Insert.on_conflict_do_update`
     using parametrized bound parameters in the ``set_`` clause would fail
     when used with executemany batching. Row-at-a-time mode is now used
     for ON CONFLICT statements with RETURNING that contain parametrized
     bindparams, ensuring each row's parameters are correctly applied. ON
     CONFLICT statements using expressions like ``excluded.<column>``
     continue to batch normally.

 .. change::
     :tags: bug, mysql
     :tickets: 13134

     Fixed issue where DDL compilation options were registered to the hard-coded
     dialect name ``mysql``. This made it awkward for MySQL-derived dialects
     like MariaDB, StarRocks, etc. to work with such options when different sets
     of options exist for different platforms. Options are now registered under
     the actual dialect name, and a fallback was added to help avoid errors when
     an option does not exist for that dialect.

     To maintain backwards compatibility, when using the MariaDB dialect with
     the options ``mysql_with_parser`` or ``mysql_using`` without also specifying
     the corresponding ``mariadb_`` prefixed options, a deprecation warning will
     be emitted. The ``mysql_`` prefixed options will continue to work during
     the deprecation period. Users should update their code to additionally
     specify ``mariadb_with_parser`` and ``mariadb_using`` when using the
     ``mariadb://`` dialect, or specify both options to support both dialects.

     Pull request courtesy Tiansu Yu.

.. changelog::

2.0.46

:released: January 21, 2026

 .. change::
     :tags: bug, sqlite
     :tickets: 13039

     Fixed issue in the aiosqlite driver where SQLAlchemy's setting of
     aiosqlite's worker thread to "daemon" stopped working because the aiosqlite
     architecture moved the location of the worker thread in version 0.22.0.
     This "daemon" flag is necessary so that a program is able to exit if the
     SQLite connection itself was not explicitly closed, which is particularly
     likely with SQLAlchemy as it maintains SQLite connections in a connection
     pool.  While it's perfectly fine to call :meth:`.AsyncEngine.dispose`
     before program exit, this is not historically or technically necessary for
     any driver of any known backend, since a primary feature of relational
     databases is durability.  The change also implements support for
     "terminate" with aiosqlite when using version version 0.22.1 or greater,
     which implements a sync ``.stop()`` method.

 .. change::
     :tags: usecase, mssql
     :tickets: 13045

     Added support for the ``IF EXISTS`` clause when dropping indexes on SQL
     Server 2016 (13.x) and later versions. The :paramref:`.DropIndex.if_exists`
     parameter is now honored by the SQL Server dialect, allowing conditional
     index drops that will not raise an error if the index does not exist.
     Pull request courtesy Edgar Ramírez Mondragón.

 .. change::
     :tags: bug, postgresql
     :tickets: 13059

     Fixed issue where PostgreSQL JSONB operators
     :meth:`_postgresql.JSONB.Comparator.path_match` and
     :meth:`_postgresql.JSONB.Comparator.path_exists` were applying incorrect
     ``VARCHAR`` casts to the right-hand side operand when used with newer
     PostgreSQL drivers such as psycopg. The operators now indicate the
     right-hand type as ``JSONPATH``, which currently results in no casting
     taking place, but is also compatible with explicit casts if the
     implementation were require it at a later point.



 .. change::
     :tags: bug, postgresql
     :tickets: 13067

     Fixed regression in PostgreSQL dialect where JSONB subscription syntax
     would generate incorrect SQL for :func:`.cast` expressions returning JSONB,
     causing syntax errors. The dialect now properly wraps cast expressions in
     parentheses when using the ``[]`` subscription syntax, generating
     ``(CAST(...))[index]`` instead of ``CAST(...)[index]`` to comply with
     PostgreSQL syntax requirements. This extends the fix from :ticket:`12778`
     which addressed the same issue for function calls.

 .. change::
     :tags: bug, mariadb
     :tickets: 13070

     Fixed the SQL compilation for the mariadb sequence "NOCYCLE" keyword that
     is to be emitted when the :paramref:`.Sequence.cycle` parameter is set to
     False on a :class:`.Sequence`.  Pull request courtesy Diego Dupin.

 .. change::
     :tags: bug, typing
     :tickets: 13075

     Fixed typing issues where ORM mapped classes and aliased entities could not
     be used as keys in result row mappings or as join targets in select
     statements. Patterns such as ``row._mapping[User]``,
     ``row._mapping[aliased(User)]``, ``row._mapping[with_polymorphic(...)]``
     (rejected by both mypy and Pylance), and ``.join(aliased(User))``
     (rejected by Pylance) are documented and fully supported at runtime but
     were previously rejected by type checkers. The type definitions for
     :class:`._KeyType` and :class:`._FromClauseArgument` have been updated to
     accept these ORM entity types.

 .. change::
     :tags: bug, postgresql

     Improved the foreign key reflection regular expression pattern used by the
     PostgreSQL dialect to be more permissive in matching identifier characters,
     allowing it to correctly handle unicode characters in table and column
     names. This change improves compatibility with PostgreSQL variants such as
     CockroachDB that may use different quoting patterns in combination with
     unicode characters in their identifiers.  Pull request courtesy Gord
     Thompson.

.. changelog::

2.0.45

:released: December 9, 2025

 .. change::
     :tags: bug, typing
     :tickets: 12730

     Fixed typing issue where :meth:`.Select.with_for_update` would not support
     lists of ORM entities or other FROM clauses in the
     :paramref:`.Select.with_for_update.of` parameter. Pull request courtesy
     Shamil.

 .. change::
     :tags: bug, orm
     :tickets: 12858

     Fixed issue where calling :meth:`.Mapper.add_property` within mapper event
     hooks such as :meth:`.MapperEvents.instrument_class`,
     :meth:`.MapperEvents.after_mapper_constructed`, or
     :meth:`.MapperEvents.before_mapper_configured` would raise an
     ``AttributeError`` because the mapper's internal property collections were
     not yet initialized. The :meth:`.Mapper.add_property` method now handles
     early-stage property additions correctly, allowing properties including
     column properties, deferred columns, and relationships to be added during
     mapper initialization events.  Pull request courtesy G Allajmi.

 .. change::
     :tags: bug, postgresql
     :tickets: 12867

     Fixed issue where PostgreSQL dialect options such as ``postgresql_include``
     on :class:`.PrimaryKeyConstraint` and :class:`.UniqueConstraint` were
     rendered in the wrong position when combined with constraint deferrability
     options like ``deferrable=True``. Pull request courtesy G Allajmi.

 .. change::
     :tags: bug, sql
     :tickets: 12915

     Some improvements to the :meth:`_sql.ClauseElement.params` method to
     replace bound parameters in a query were made, however the ultimate issue
     in :ticket:`12915` involving ORM :func:`_orm.aliased` cannot be fixed fully
     until 2.1, where the method is being rewritten to work without relying on
     Core cloned traversal.

 .. change::
     :tags: bug, sqlite, reflection
     :tickets: 12924

     A series of improvements have been made for reflection of CHECK constraints
     on SQLite. The reflection logic now correctly handles table names
     containing the strings "CHECK" or "CONSTRAINT", properly supports all four
     SQLite identifier quoting styles (double quotes, single quotes, brackets,
     and backticks) for constraint names, and accurately parses CHECK constraint
     expressions containing parentheses within string literals using balanced
     parenthesis matching with string context tracking.    Big thanks to
     GruzdevAV for new test cases and implementation ideas.

 .. change::
     :tags: bug, orm
     :tickets: 12952

     Fixed issue in Python 3.14 where dataclass transformation would fail when
     a mapped class using :class:`.MappedAsDataclass` included a
     :func:`.relationship` referencing a class that was not available at
     runtime (e.g., within a ``TYPE_CHECKING`` block). This occurred when using
     Python 3.14's :pep:`649` deferred annotations feature, which is the
     default behavior without a ``from __future__ import annotations``
     directive.

 .. change::
     :tags: bug, sqlite
     :tickets: 12954

     Fixed issue where SQLite dialect would fail to reflect constraint names
     that contained uppercase letters or other characters requiring quoting. The
     regular expressions used to parse primary key, foreign key, and unique
     constraint names from the ``CREATE TABLE`` statement have been updated to
     properly handle both quoted and unquoted constraint names.

 .. change::
     :tags: bug, typing

     Fixed typing issue where :class:`.coalesce` would not return the correct
     return type when a nullable form of that argument were passed, even though
     this function is meant to select the non-null entry among possibly null
     arguments.  Pull request courtesy Yannick PÉROUX.


 .. change::
     :tags: usecase, mysql
     :tickets: 12964

     Added support for MySQL 8.0.1 + ``FOR SHARE`` to be emitted for the
     :meth:`.Select.with_for_update` method, which offers compatibility with
     ``NOWAIT`` and ``SKIP LOCKED``.  The new syntax is used only for MySQL when
     version 8.0.1 or higher is detected. Pull request courtesy JetDrag.

 .. change::
     :tags: bug, sql
     :tickets: 12987

     Fixed issue where using the :meth:`.ColumnOperators.in_` operator with a
     nested :class:`.CompoundSelect` statement (e.g. an ``INTERSECT`` of
     ``UNION`` queries) would raise a :class:`NotImplementedError` when the
     nested compound select was the first argument to the outer compound select.
     The ``_scalar_type()`` internal method now properly handles nested compound
     selects.

 .. change::
     :tags: bug, postgresql
     :tickets: 13015

     Fixed the structure of the SQL string used for the
     :ref:`engine_insertmanyvalues` feature when an explicit sequence with
     ``nextval()`` is used. The SQL function invocation for the sequence has
     been moved from being rendered inline within each tuple inside of VALUES to
     being rendered once in the SELECT that reads from VALUES. This change
     ensures the function is invoked in the correct order as rows are processed,
     rather than assuming PostgreSQL will execute inline function calls within
     VALUES in a particular order. While current PostgreSQL versions appear to
     handle the previous approach correctly, the database does not guarantee
     this behavior for future versions.

 .. change::
     :tags: usecase, postgresql
     :tickets: 6511

     Added support for reflection of collation in types for PostgreSQL.
     The ``collation`` will be set only if different from the default
     one for the type.
     Pull request courtesy Denis Laxalde.

 .. change::
     :tags: bug, examples

     Fixed the "short_selects" performance example where the cache was being
     used in all the examples, making it impossible to compare performance with
     and without the cache.   Less important comparisons like "lambdas" and
     "baked queries" have been removed.


 .. change::
     :tags: change, tests

     A noxfile.py has been added to allow testing with nox.  This is a direct
     port of 2.1's move to nox, however leaves the tox.ini file in place and
     retains all test documentation in terms of tox.   Version 2.1 will move to
     nox fully, including deprecation warnings for tox and new testing
     documentation.

.. changelog::

2.0.44

:released: October 10, 2025

 .. change::
     :tags: bug, sql
     :tickets: 12271

     Improved the implementation of :meth:`.UpdateBase.returning` to use more
     robust logic in setting up the ``.c`` collection of a derived statement
     such as a CTE.  This fixes issues related to RETURNING clauses that feature
     expressions based on returned columns with or without qualifying labels.

 .. change::
     :tags: usecase, asyncio
     :tickets: 12273

     Generalize the terminate logic employed by the asyncpg dialect to reuse
     it in the aiomysql and asyncmy dialect implementation.

 .. change::
     :tags: bug, mssql
     :tickets: 12798

     Improved the base implementation of the asyncio cursor such that it
     includes the option for the underlying driver's cursor to be actively
     closed in those cases where it requires ``await`` in order to complete the
     close sequence, rather than relying on garbage collection to "close" it,
     when a plain :class:`.Result` is returned that does not use ``await`` for
     any of its methods.  The previous approach of relying on gc was fine for
     MySQL and SQLite dialects but has caused problems with the aioodbc
     implementation on top of SQL Server.   The new option is enabled
     for those dialects which have an "awaitable" ``cursor.close()``, which
     includes the aioodbc, aiomysql, and asyncmy dialects (aiosqlite is also
     modified for 2.1 only).

 .. change::
     :tags: bug, ext
     :tickets: 12802

     Fixed issue caused by an unwanted functional change while typing
     the :class:`.MutableList` class.
     This change also reverts all other functional changes done in
     the same change.

 .. change::
     :tags: bug, typing
     :tickets: 12813

     Fixed typing bug where the :meth:`.Session.execute` method advertised that
     it would return a :class:`.CursorResult` if given an insert/update/delete
     statement.  This is not the general case as several flavors of ORM
     insert/update do not actually yield a :class:`.CursorResult` which cannot
     be differentiated at the typing overload level, so the method now yields
     :class:`.Result` in all cases.  For those cases where
     :class:`.CursorResult` is known to be returned and the ``.rowcount``
     attribute is required, please use ``typing.cast()``.

 .. change::
     :tags: usecase, orm
     :tickets: 12829

     The way ORM Annotated Declarative interprets Python :pep:`695` type aliases
     in ``Mapped[]`` annotations has been refined to expand the lookup scheme. A
     :pep:`695` type can now be resolved based on either its direct presence in
     :paramref:`_orm.registry.type_annotation_map` or its immediate resolved
     value, as long as a recursive lookup across multiple :pep:`695` types is
     not required for it to resolve. This change reverses part of the
     restrictions introduced in 2.0.37 as part of :ticket:`11955`, which
     deprecated (and disallowed in 2.1) the ability to resolve any :pep:`695`
     type that was not explicitly present in
     :paramref:`_orm.registry.type_annotation_map`. Recursive lookups of
     :pep:`695` types remains deprecated in 2.0 and disallowed in version 2.1,
     as do implicit lookups of ``NewType`` types without an entry in
     :paramref:`_orm.registry.type_annotation_map`.

     Additionally, new support has been added for generic :pep:`695` aliases that
     refer to :pep:`593` ``Annotated`` constructs containing
     :func:`_orm.mapped_column` configurations. See the sections below for
     examples.

     .. seealso::

         :ref:`orm_declarative_type_map_pep695_types`

         :ref:`orm_declarative_mapped_column_generic_pep593`

 .. change::
     :tags: bug, postgresql
     :tickets: 12847

     Fixed issue where selecting an enum array column containing NULL values
     would fail to parse properly in the PostgreSQL dialect. The
     :func:`._split_enum_values` function now correctly handles NULL entries by
     converting them to Python ``None`` values.

 .. change::
     :tags: bug, typing
     :tickets: 12855

     Added new decorator :func:`_orm.mapped_as_dataclass`, which is a function
     based form of :meth:`_orm.registry.mapped_as_dataclass`; the method form
     :meth:`_orm.registry.mapped_as_dataclass` does not seem to be correctly
     recognized within the scope of :pep:`681` in recent mypy versions.

 .. change::
     :tags: bug, sqlite
     :tickets: 12864

     Fixed issue where SQLite table reflection would fail for tables using
     ``WITHOUT ROWID`` and/or ``STRICT`` table options when the table contained
     generated columns. The regular expression used to parse ``CREATE TABLE``
     statements for generated column detection has been updated to properly
     handle these SQLite table options that appear after the column definitions.
     Pull request courtesy Tip ten Brink.

 .. change::
     :tags: bug, postgresql
     :tickets: 12874

     Fixed issue where the :func:`_sql.any_` and :func:`_sql.all_` aggregation
     operators would not correctly coerce the datatype of the compared value, in
     those cases where the compared value were not a simple int/str etc., such
     as a Python ``Enum`` or other custom value.   This would lead to execution
     time errors for these values.  This issue is essentially the same as
     :ticket:`6515` which was for the now-legacy :meth:`.ARRAY.any` and
     :meth:`.ARRAY.all` methods.

 .. change::
     :tags: bug, engine
     :tickets: 12881

     Implemented initial support for free-threaded Python by adding new tests
     and reworking the test harness to include Python 3.13t and Python 3.14t in
     test runs. Two concurrency issues have been identified and fixed: the first
     involves initialization of the ``.c`` collection on a ``FromClause``, a
     continuation of :ticket:`12302`, where an optional mutex under
     free-threading is added; the second involves synchronization of the pool
     "first_connect" event, which first received thread synchronization in
     :ticket:`2964`, however under free-threading the creation of the mutex
     itself runs under the same free-threading mutex. Support for free-threaded
     wheels on Pypi is implemented as well within the 2.1 series only.  Initial
     pull request and test suite courtesy Lysandros Nikolaou.

 .. change::
     :tags: bug, schema
     :tickets: 12884

     Fixed issue where :meth:`_schema.MetaData.reflect` did not forward
     dialect-specific keyword arguments to the :class:`_engine.Inspector`
     methods, causing options like ``oracle_resolve_synonyms`` to be ignored
     during reflection. The method now ensures that all extra kwargs passed to
     :meth:`_schema.MetaData.reflect` are forwarded to
     :meth:`_engine.Inspector.get_table_names` and related reflection methods.
     Pull request courtesy Lukáš Kožušník.

 .. change::
     :tags: bug, mssql
     :tickets: 12894

     Fixed issue where the index reflection for SQL Server would
     not correctly return the order of the column inside an index
     when the order of the columns in the index did not match the
     order of the columns in the table.
     Pull request courtesy of Allen Chen.

 .. change::
     :tags: bug, orm
     :tickets: 12905

     Fixed a caching issue where :func:`_orm.with_loader_criteria` would
     incorrectly reuse cached bound parameter values when used with
     :class:`_sql.CompoundSelect` constructs such as :func:`_sql.union`. The
     issue was caused by the cache key for compound selects not including the
     execution options that are part of the :class:`_sql.Executable` base class,
     which :func:`_orm.with_loader_criteria` uses to apply its criteria
     dynamically. The fix ensures that compound selects and other executable
     constructs properly include execution options in their cache key traversal.

 .. change::
     :tags: bug, mssql, reflection
     :tickets: 12907

     Fixed issue in the MSSQL dialect's foreign key reflection query where
     duplicate rows could be returned when a foreign key column and its
     referenced primary key column have the same name, and both the referencing
     and referenced tables have indexes with the same name. This resulted in an
     "ForeignKeyConstraint with duplicate source column references are not
     supported" error when attempting to reflect such tables. The query has been
     corrected to exclude indexes on the child table when looking for unique
     indexes referenced by foreign keys.

 .. change::
     :tags: bug, platform

     Unblocked automatic greenlet installation for Python 3.14 now that
     there are greenlet wheels on pypi for python 3.14.

.. changelog::

2.0.43

:released: August 11, 2025

 .. change::
     :tags: usecase, oracle
     :tickets: 12711

     Extended :class:`_oracle.VECTOR` to support sparse vectors. This update
     introduces :class:`_oracle.VectorStorageType` to specify sparse or dense
     storage and added :class:`_oracle.SparseVector`. Pull request courtesy
     Suraj Shaw.

 .. change::
     :tags: bug, orm
     :tickets: 12748

     Fixed issue where using the ``post_update`` feature would apply incorrect
     "pre-fetched" values to the ORM objects after a multi-row UPDATE process
     completed.  These "pre-fetched" values would come from any column that had
     an :paramref:`.Column.onupdate` callable or a version id generator used by
     :paramref:`.orm.Mapper.version_id_generator`; for a version id generator
     that delivered random identifiers like timestamps or UUIDs, this incorrect
     data would lead to a DELETE statement against those same rows to fail in
     the next step.


 .. change::
     :tags: bug, postgresql
     :tickets: 12778

     Fixed regression in PostgreSQL dialect where JSONB subscription syntax
     would generate incorrect SQL for JSONB-returning functions, causing syntax
     errors. The dialect now properly wraps function calls and expressions in
     parentheses when using the ``[]`` subscription syntax, generating
     ``(function_call)[index]`` instead of ``function_call[index]`` to comply
     with PostgreSQL syntax requirements.

 .. change::
     :tags: usecase, engine
     :tickets: 12784

     Added new parameter :paramref:`.create_engine.skip_autocommit_rollback`
     which provides for a per-dialect feature of preventing the DBAPI
     ``.rollback()`` from being called under any circumstances, if the
     connection is detected as being in "autocommit" mode.   This improves upon
     a critical performance issue identified in MySQL dialects where the network
     overhead of the ``.rollback()`` call remains prohibitive even if autocommit
     mode is set.

     .. seealso::

         :ref:`dbapi_autocommit_skip_rollback`

 .. change::
     :tags: bug, orm
     :tickets: 12787

     Fixed issue where :paramref:`_orm.mapped_column.use_existing_column`
     parameter in :func:`_orm.mapped_column` would not work when the
     :func:`_orm.mapped_column` is used inside of an ``Annotated`` type alias in
     polymorphic inheritance scenarios. The parameter is now properly recognized
     and processed during declarative mapping configuration.

 .. change::
     :tags: bug, orm
     :tickets: 12790

     Improved the implementation of the :func:`_orm.selectin_polymorphic`
     inheritance loader strategy to properly render the IN expressions using
     chunks of 500 records each, in the same manner as that of the
     :func:`_orm.selectinload` relationship loader strategy.  Previously, the IN
     expression would be arbitrarily large, leading to failures on databases
     that have limits on the size of IN expressions including Oracle Database.

.. changelog::

2.0.42

:released: July 29, 2025

 .. change::
     :tags: usecase, orm
     :tickets: 10674

     Added ``dataclass_metadata`` argument to all ORM attribute constructors
     that accept dataclasses parameters, e.g. :paramref:`.mapped_column.dataclass_metadata`,
     :paramref:`.relationship.dataclass_metadata`, etc.
     It's passed to the underlying dataclass ``metadata`` attribute
     of the dataclass field. Pull request courtesy Sigmund Lahn.

 .. change::
     :tags: usecase, postgresql
     :tickets: 10927

     Added support for PostgreSQL 14+ :class:`.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.

     .. warning::

       **For applications that have indexes against JSONB subscript
       expressions**

       This change caused an unintended side effect for indexes that were
       created against expressions that use subscript notation, e.g.
       ``Index("ix_entity_json_ab_text", data["a"]["b"].astext)``. If these
       indexes were generated with the older syntax e.g. ``((entity.data ->
       'a') ->> 'b')``, they will not be used by the PostgreSQL query
       planner when a query is made using SQLAlchemy 2.0.42 or higher on
       PostgreSQL versions 14 or higher. This occurs because the new text
       will resemble ``(entity.data['a'] ->> 'b')`` which will fail to
       produce the exact textual syntax match required by the PostgreSQL
       query planner.  Therefore, for users upgrading to SQLAlchemy 2.0.42
       or higher, existing indexes that were created against :class:`.JSONB`
       expressions that use subscripting would need to be dropped and
       re-created in order for them to work with the new query syntax, e.g.
       an expression like ``((entity.data -> 'a') ->> 'b')`` would become
       ``(entity.data['a'] ->> 'b')``.

       .. seealso::

             :ticket:`12868` - discussion of this issue

 .. change::
     :tags: bug, orm
     :tickets: 12593

     Implemented the :func:`_orm.defer`, :func:`_orm.undefer` and
     :func:`_orm.load_only` loader options to work for composite attributes, a
     use case that had never been supported previously.

 .. change::
     :tags: bug, postgresql, reflection
     :tickets: 12600

     Fixed regression caused by :ticket:`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.

 .. change::
     :tags: bug, mysql
     :tickets: 12648

     Fixed yet another regression caused by by the DEFAULT rendering changes in
     2.0.40 :ticket:`12425`, similar to :ticket:`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.



 .. change::
     :tags: bug, mssql
     :tickets: 12654

     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

 .. change::
     :tags: bug, sql
     :tickets: 12681

     Fixed issue where :func:`.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.


 .. change::
     :tags: bug, sql
     :tickets: 12692

     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.


 .. change::
     :tags: bug, orm
     :tickets: 12692

     Fixed bug where the ORM would pull in the wrong column into an UPDATE when
     a key name inside of the :meth:`.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.

 .. change::
     :tags: bug, postgresql
     :tickets: 12728

     Re-raise caught ``CancelledError`` in the terminate method of the
     asyncpg dialect to avoid possible hangs of the code execution.


 .. change::
     :tags: usecase, sql
     :tickets: 12734

     The :func:`_sql.values` construct gains a new method :meth:`_sql.Values.cte`,
     which allows creation of a named, explicit-columns :class:`.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.

 .. change::
     :tags: bug, reflection, postgresql
     :tickets: 12744

     Fixes bug that would mistakenly interpret a domain or enum type
     with name starting in ``interval`` as an ``INTERVAL`` type while
     reflecting a table.

 .. change::
     :tags: usecase, postgresql
     :tickets: 8664

     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.

     .. seealso::

         :ref:`postgresql_operator_classes`

 .. change::
     :tags: engine

     Improved validation of execution parameters passed to the
     :meth:`_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.

.. changelog::

2.0.41

:released: May 14, 2025

 .. change::
     :tags: usecase, postgresql
     :tickets: 10665

     Added support for ``postgresql_include`` keyword argument to
     :class:`_schema.UniqueConstraint` and :class:`_schema.PrimaryKeyConstraint`.
     Pull request courtesy Denis Laxalde.

     .. seealso::

         :ref:`postgresql_constraint_options`

 .. change::
     :tags: usecase, oracle
     :tickets: 12317, 12341

     Added new datatype :class:`_oracle.VECTOR` and accompanying DDL and DQL
     support to fully support this type for Oracle Database. This change
     includes the base :class:`_oracle.VECTOR` type that adds new type-specific
     methods ``l2_distance``, ``cosine_distance``, ``inner_product`` as well as
     new parameters ``oracle_vector`` for the :class:`.Index` construct,
     allowing vector indexes to be configured, and ``oracle_fetch_approximate``
     for the :meth:`.Select.fetch` clause.  Pull request courtesy Suraj Shaw.

     .. seealso::

         :ref:`oracle_vector_datatype`


 .. change::
     :tags: bug, platform
     :tickets: 12405

     Adjusted the test suite as well as the ORM's method of scanning classes for
     annotations to work under current beta releases of Python 3.14 (currently
     3.14.0b1) as part of an ongoing effort to support the production release of
     this Python release.  Further changes to Python's means of working with
     annotations is expected in subsequent beta releases for which SQLAlchemy's
     test suite will need further adjustments.



 .. change::
     :tags: bug, mysql
     :tickets: 12488

     Fixed regression caused by the DEFAULT rendering changes in version 2.0.40
     via :ticket:`12425` where using lowercase ``on update`` in a MySQL server
     default would incorrectly apply parenthesis, leading to errors when MySQL
     interpreted the rendered DDL.  Pull request courtesy Alexander Ruehe.

 .. change::
     :tags: bug, sqlite
     :tickets: 12566

     Fixed and added test support for some SQLite SQL functions hardcoded into
     the compiler, most notably the ``localtimestamp`` function which rendered
     with incorrect internal quoting.

 .. change::
     :tags: bug, engine
     :tickets: 12579

     The error message that is emitted when a URL cannot be parsed no longer
     includes the URL itself within the error message.


 .. change::
     :tags: bug, typing
     :tickets: 12588

     Removed ``__getattr__()`` rule from ``sqlalchemy/__init__.py`` that
     appeared to be trying to correct for a previous typographical error in the
     imports. This rule interferes with type checking and is removed.


 .. change::
     :tags: bug, installation

     Removed the "license classifier" from setup.cfg for SQLAlchemy 2.0, which
     eliminates loud deprecation warnings when building the package.  SQLAlchemy
     2.1 will use a full :pep:`639` configuration in pyproject.toml while
     SQLAlchemy 2.0 remains using ``setup.cfg`` for setup.



.. changelog::

2.0.40

:released: March 27, 2025

 .. change::
     :tags: usecase, postgresql
     :tickets: 11595

     Added support for specifying a list of columns for ``SET NULL`` and ``SET
     DEFAULT`` actions of ``ON DELETE`` clause of foreign key definition on
     PostgreSQL.  Pull request courtesy Denis Laxalde.

     .. seealso::

         :ref:`postgresql_constraint_options`

 .. change::
     :tags: bug, orm
     :tickets: 12329

     Fixed regression which occurred as of 2.0.37 where the checked
     :class:`.ArgumentError` that's raised when an inappropriate type or object
     is used inside of a :class:`.Mapped` annotation would raise ``TypeError``
     with "boolean value of this clause is not defined" if the object resolved
     into a SQL expression in a boolean context, for programs where future
     annotations mode was not enabled.  This case is now handled explicitly and
     a new error message has also been tailored for this case.  In addition, as
     there are at least half a dozen distinct error scenarios for interpretation
     of the :class:`.Mapped` construct, these scenarios have all been unified
     under a new subclass of :class:`.ArgumentError` called
     :class:`.MappedAnnotationError`, to provide some continuity between these
     different scenarios, even though specific messaging remains distinct.

 .. change::
     :tags: bug, mysql
     :tickets: 12332

     Support has been re-added for the MySQL-Connector/Python DBAPI using the
     ``mysql+mysqlconnector://`` URL scheme.   The DBAPI now works against
     modern MySQL versions as well as MariaDB versions (in the latter case it's
     required to pass charset/collation explicitly).   Note however that
     server side cursor support is disabled due to unresolved issues with this
     driver.

 .. change::
     :tags: bug, sql
     :tickets: 12363

     Fixed issue in :class:`.CTE` constructs involving multiple DDL
     :class:`_sql.Insert` statements with multiple VALUES parameter sets where the
     bound parameter names generated for these parameter sets would conflict,
     generating a compile time error.


 .. change::
     :tags: bug, sqlite
     :tickets: 12425

     Expanded the rules for when to apply parenthesis to a server default in DDL
     to suit the general case of a default string that contains non-word
     characters such as spaces or operators and is not a string literal.

 .. change::
     :tags: bug, mysql
     :tickets: 12425

     Fixed issue in MySQL server default reflection where a default that has
     spaces would not be correctly reflected.  Additionally, expanded the rules
     for when to apply parenthesis to a server default in DDL to suit the
     general case of a default string that contains non-word characters such as
     spaces or operators and is not a string literal.


 .. change::
     :tags: usecase, postgresql
     :tickets: 12432

     When building a PostgreSQL ``ARRAY`` literal using
     :class:`_postgresql.array` with an empty ``clauses`` argument, the
     :paramref:`_postgresql.array.type_` parameter is now significant in that it
     will be used to render the resulting ``ARRAY[]`` SQL expression with a
     cast, such as ``ARRAY[]::INTEGER``. Pull request courtesy Denis Laxalde.

 .. change::
     :tags: sql, usecase
     :tickets: 12450

     Implemented support for the GROUPS frame specification in window functions
     by adding :paramref:`_sql.over.groups` option to :func:`_sql.over`
     and :meth:`.FunctionElement.over`. Pull request courtesy Kaan Dikmen.

 .. change::
     :tags: bug, sql
     :tickets: 12451

     Fixed regression caused by :ticket:`7471` leading to a SQL compilation
     issue where name disambiguation for two same-named FROM clauses with table
     aliasing in use at the same time would produce invalid SQL in the FROM
     clause with two "AS" clauses for the aliased table, due to double aliasing.

 .. change::
     :tags: bug, asyncio
     :tickets: 12471

     Fixed issue where :meth:`.AsyncSession.get_transaction` and
     :meth:`.AsyncSession.get_nested_transaction` would fail with
     ``NotImplementedError`` if the "proxy transaction" used by
     :class:`.AsyncSession` were garbage collected and needed regeneration.

 .. change::
     :tags: bug, orm
     :tickets: 12473

     Fixed regression in ORM Annotated Declarative class interpretation caused
     by ``typing_extension==4.13.0`` that introduced a different implementation
     for ``TypeAliasType`` while SQLAlchemy assumed that it would be equivalent
     to the ``typing`` version, leading to pep-695 type annotations not
     resolving to SQL types as expected.

.. changelog::

2.0.39

:released: March 11, 2025

 .. change::
     :tags: bug, postgresql
     :tickets: 11751

     Add SQL typing to reflection query used to retrieve a the structure
     of IDENTITY columns, adding explicit JSON typing to the query to su

@pyup-bot
Copy link
Copy Markdown
Collaborator Author

Closing this in favor of #851

@pyup-bot pyup-bot closed this Mar 23, 2026
@fake-name fake-name deleted the pyup-scheduled-update-2026-03-16 branch March 23, 2026 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant