Released: October 12, 2020
[orm] [bug] An
ArgumentErrorwith more detail is now raised if the target
_query.Query.join()is set to an unmapped object.
Prior to this change a less detailed
Pull request courtesy Ramon Williams.
[orm] [bug] Fixed issue where using a loader option against a string attribute name
that is not actually a mapped attribute, such as a plain Python descriptor,
would raise an uninformative AttributeError; a descriptive error is now
[engine] [bug] Fixed issue where a non-string object sent to
_exc.SQLAlchemyErroror a subclass, as occurs with some third
party dialects, would fail to stringify correctly. Pull request
courtesy Andrzej Bartosiński.
[engine] [bug] Repaired a function-level import that was not using SQLAlchemy's standard
late-import system within the sqlalchemy.exc module.
[sql] [bug] Fixed issue where the
_expression.Overconstruct would produce a recursion overflow.
[sql] [bug] Fixed bug where an error was not raised in the case where a
_sql.column()were added to more than one
time. This raised correctly for the
raised when this occurs.
[postgresql] [usecase] The psycopg2 dialect now support PostgreSQL multiple host connections, by
passing host/port combinations to the query string. Pull request courtesy
[postgresql] [bug] Adjusted the
_types.ARRAY.Comparator.all()methods to implement a straight "NOT"
operation for negation, rather than negating the comparison operator.
[postgresql] [bug] Fixed issue where the
_postgresql.ENUMtype would not consult the
schema translate map when emitting a CREATE TYPE or DROP TYPE during the
test to see if the type exists or not. Additionally, repaired an issue
where if the same enum were encountered multiple times in a single DDL
sequence, the "check" query would run repeatedly rather than relying upon a
[mysql] [usecase] Adjusted the MySQL dialect to correctly parenthesize functional index
expressions as accepted by MySQL 8. Pull request courtesy Ramon Williams.
[mysql] [bug] The "skip_locked" keyword used with
with_for_update()will emit a
warning when used on MariaDB backends, and will then be ignored. This is
a deprecated behavior that will raise in SQLAlchemy 1.4, as an application
that requests "skip locked" is looking for a non-blocking operation which
is not available on those backends.
[mysql] [bug] Fixed bug where an UPDATE statement against a JOIN using MySQL multi-table
format would fail to include the table prefix for the target table if the
statement had no WHERE clause, as only the WHERE clause were scanned to
detect a "multi table update" at that particular point. The target
is now also scanned if it's a JOIN to get the leftmost table as the
primary table and the additional entries as additional FROM entries.
[mysql] [change] Add new MySQL reserved words:
lateraladded in MySQL 8.0.1
and 8.0.14, respectively; this indicates that these terms will be quoted if
used as table or column identifier names.
[mssql] [bug] Fixed issue where a SQLAlchemy connection URI for Azure DW with
authentication=ActiveDirectoryIntegrated(and no username+password)
was not constructing the ODBC connection string in a way that was
acceptable to the Azure DW instance.
[bug] [pool] Fixed issue where the following pool parameters were not being propagated
to the new pool created when
use_lifo. Additionally the
reset_on_returnparameter is now propagated for the
[bug] [associationproxy] [ext] An informative error is now raised when attempting to use an association
proxy element as a plain column expression to be SELECTed from or used in a
SQL function; this use case is not currently supported.
[bug] [tests] Fixed incompatibilities in the test suite when running against Pytest 6.x.