github sqlalchemy/sqlalchemy rel_1_3_20


Released: October 12, 2020


  • [orm] [bug] An ArgumentError with more detail is now raised if the target
    parameter for _query.Query.join() is set to an unmapped object.
    Prior to this change a less detailed AttributeError was raised.
    Pull request courtesy Ramon Williams.

    References: #4428

  • [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

    References: #4589


  • [engine] [bug] Fixed issue where a non-string object sent to
    _exc.SQLAlchemyError or a subclass, as occurs with some third
    party dialects, would fail to stringify correctly. Pull request
    courtesy Andrzej Bartosiński.

    References: #5599

  • [engine] [bug] Repaired a function-level import that was not using SQLAlchemy's standard
    late-import system within the sqlalchemy.exc module.

    References: #5632


  • [sql] [bug] Fixed issue where the pickle.dumps() operation against
    _expression.Over construct would produce a recursion overflow.

    References: #5644

  • [sql] [bug] Fixed bug where an error was not raised in the case where a
    _sql.column() were added to more than one _sql.table() at a
    time. This raised correctly for the _schema.Column and
    _schema.Table objects. An _exc.ArgumentError is now
    raised when this occurs.

    References: #5618


  • [postgresql] [usecase] The psycopg2 dialect now support PostgreSQL multiple host connections, by
    passing host/port combinations to the query string. Pull request courtesy
    Ramon Williams.

    References: #4392

  • [postgresql] [bug] Adjusted the _types.ARRAY.Comparator.any() and
    _types.ARRAY.Comparator.all() methods to implement a straight "NOT"
    operation for negation, rather than negating the comparison operator.

    References: #5518

  • [postgresql] [bug] Fixed issue where the _postgresql.ENUM type 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
    cached value.

    References: #5520


  • [mysql] [usecase] Adjusted the MySQL dialect to correctly parenthesize functional index
    expressions as accepted by MySQL 8. Pull request courtesy Ramon Williams.

    References: #5462

  • [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.

    References: #5568

  • [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.

    References: #5617

  • [mysql] [change] Add new MySQL reserved words: cube, lateral added 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.

    References: #5539


  • [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.

    References: #5592


  • [bug] [pool] Fixed issue where the following pool parameters were not being propagated
    to the new pool created when _engine.Engine.dispose() were called:
    pre_ping, use_lifo. Additionally the recycle and
    reset_on_return parameter is now propagated for the
    _engine.AssertionPool class.

    References: #5582

  • [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.

    References: #5541, #5542

  • [bug] [tests] Fixed incompatibilities in the test suite when running against Pytest 6.x.

    References: #5635

7 days ago