Skip to content

Conversation

@pyup-bot
Copy link
Collaborator

This PR updates SQLAlchemy from 1.4.3 to 1.4.11.

Changelog

1.4.11

:released: April 21, 2021

 .. change::
     :tags: bug, engine, regression
     :tickets: 6337

     Fixed critical regression caused by the change in :ticket:`5497` where the
     connection pool "init" phase no longer occurred within mutexed isolation,
     allowing other threads to proceed with the dialect uninitialized, which
     could then impact the compilation of SQL statements.


 .. change::
     :tags: bug, orm, regression, declarative
     :tickets: 6331

     Fixed regression where recent changes to support Python dataclasses had the
     inadvertent effect that an ORM mapped class could not successfully override
     the ``__new__()`` method.

.. changelog::

1.4.10

:released: April 20, 2021

 .. change::
     :tags: bug, declarative, regression
     :tickets: 6291

     Fixed :func:`_declarative.instrument_declarative` that called
     a non existing registry method.

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

     Fixed bug in new :func:`_orm.with_loader_criteria` feature where using a
     mixin class with :func:`_orm.declared_attr` on an attribute that were
     accessed inside the custom lambda would emit a warning regarding using an
     unmapped declared attr, when the lambda callable were first initialized.
     This warning is now prevented using special instrumentation for this
     lambda initialization step.


 .. change::
     :tags: usecase, schema, mssql
     :tickets: 6306

     The :paramref:`_types.DateTime.timezone` parameter when set to ``True``
     will now make use of the ``DATETIMEOFFSET`` column type with SQL Server
     when used to emit DDL, rather than ``DATETIME`` where the flag was silently
     ignored.

 .. change::
     :tags: orm, bug, regression
     :tickets: 6326

     Fixed additional regression caused by the "eagerloaders on refresh" feature
     added in :ticket:`1763` where the refresh operation historically would set
     ``populate_existing``, which given the new feature now overwrites pending
     changes on eagerly loaded objects when autoflush is false. The
     populate_existing flag has been turned off for this case and a more
     specific method used to ensure the correct attributes refreshed.

 .. change::
     :tags: bug, orm, result
     :tickets: 6299

     Fixed an issue when using 2.0 style execution that prevented using
     :meth:`_result.Result.scalar_one` or
     :meth:`_result.Result.scalar_one_or_none` after calling
     :meth:`_result.Result.unique`, for the case where the ORM is returning a
     single-element row in any case.

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

     Fixed issue in SQL compiler where the bound parameters set up for a
     :class:`.Values` construct wouldn't be positionally tracked correctly if
     inside of a :class:`_sql.CTE`, affecting database drivers that support
     VALUES + ctes and use positional parameters such as SQL Server in
     particular as well as asyncpg.   The fix also repairs support for
     compiler flags such as ``literal_binds``.

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

     Fixed issue where :func:`_functions.next_value` was not deriving its type
     from the corresponding :class:`_schema.Sequence`, instead hardcoded to
     :class:`_types.Integer`. The specific numeric type is now used.

 .. change::
     :tags: bug, mypy
     :tickets: 6255

     Fixed issue where mypy plugin would not correctly interpret an explicit
     :class:`_orm.Mapped` annotation in conjunction with a
     :func:`_orm.relationship` that refers to a class by string name; the
     correct annotation would be downgraded to a less specific one leading to
     typing errors.

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

     Repaired and solidified issues regarding custom functions and other
     arbitrary expression constructs which within SQLAlchemy's column labeling
     mechanics would seek to use ``str(obj)`` to get a string representation to
     use as an anonymous column name in the ``.c`` collection of a subquery.
     This is a very legacy behavior that performs poorly and leads to lots of
     issues, so has been revised to no longer perform any compilation by
     establishing specific methods on :class:`.FunctionElement` to handle this
     case, as SQL functions are the only use case that it came into play. An
     effect of this behavior is that an unlabeled column expression with no
     derivable name will be given an arbitrary label starting with the prefix
     ``"_no_label"`` in the ``.c`` collection of a subquery; these were
     previously being represented either as the generic stringification of that
     expression, or as an internal symbol.

 .. change::
     :tags: usecase, orm
     :ticketS: 6301

     Altered some of the behavior repaired in :ticket:`6232` where the
     ``immediateload`` loader strategy no longer goes into recursive loops; the
     modification is that an eager load (joinedload, selectinload, or
     subqueryload) from A->bs->B which then states ``immediateload`` for a
     simple manytoone B->a->A that's in the identity map will populate the B->A,
     so that this attribute is back-populated when the collection of A/A.bs are
     loaded. This allows the objects to be functional when detached.


.. changelog::

1.4.9

:released: April 17, 2021

 .. change::
     :tags: bug, sql, regression
     :tickets: 6290

     Fixed regression where an empty in statement on a tuple would result
     in an error when compiled with the option ``literal_binds=True``.

 .. change::
     :tags: bug, regression, orm, performance, sql
     :tickets: 6304

     Fixed a critical performance issue where the traversal of a
     :func:`_sql.select` construct would traverse a repetitive product of the
     represented FROM clauses as they were each referred towards by columns in
     the columns clause; for a series of nested subqueries with lots of columns
     this could cause a large delay and significant memory growth. This
     traversal is used by a wide variety of SQL and ORM functions, including by
     the ORM :class:`_orm.Session` when it's configured to have
     "table-per-bind", which while this is not a common use case, it seems to be
     what Flask-SQLAlchemy is hardcoded as using, so the issue impacts
     Flask-SQLAlchemy users. The traversal has been repaired to uniqify on FROM
     clauses which was effectively what would happen implicitly with the pre-1.4
     architecture.

 .. change::
     :tags: bug, postgresql, sql, regression
     :tickets: 6303

     Fixed an argument error in the default and PostgreSQL compilers that
     would interfere with an UPDATE..FROM or DELETE..FROM..USING statement
     that was then SELECTed from as a CTE.

 .. change::
     :tags: bug, orm, regression
     :tickets: 6272

     Fixed regression where an attribute that is mapped to a
     :func:`_orm.synonym` could not be used in column loader options such as
     :func:`_orm.load_only`.

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

     Established support for :func:`_orm.synoynm` in conjunction with
     hybrid property, assocaitionproxy is set up completely, including that
     synonyms can be established linking to these constructs which work
     fully.   This is a behavior that was semi-explicitly disallowed previously,
     however since it did not fail in every scenario, explicit support
     for assoc proxy and hybrids has been added.


.. changelog::

1.4.8

:released: April 15, 2021

 .. change::
     :tags: change, mypy

     Updated Mypy plugin to only use the public plugin interface of the
     semantic analyzer.

 .. change::
     :tags: bug, mssql, regression
     :tickets: 6265

     Fixed an additional regression in the same area as that of :ticket:`6173`,
     :ticket:`6184`, where using a value of 0 for OFFSET in conjunction with
     LIMIT with SQL Server would create a statement using "TOP", as was the
     behavior in 1.3, however due to caching would then fail to respond
     accordingly to other values of OFFSET. If the "0" wasn't first, then it
     would be fine. For the fix, the "TOP" syntax is now only emitted if the
     OFFSET value is omitted entirely, that is, :meth:`_sql.Select.offset` is
     not used. Note that this change now requires that if the "with_ties" or
     "percent" modifiers are used, the statement can't specify an OFFSET of
     zero, it now needs to be omitted entirely.

 .. change::
     :tags: bug, engine

     The :meth:`_engine.Dialect.has_table` method now raises an informative
     exception if a non-Connection is passed to it, as this incorrect behavior
     seems to be common.  This method is not intended for external use outside
     of a dialect.  Please use the :meth:`.Inspector.has_table` method
     or for cross-compatibility with older SQLAlchemy versions, the
     :meth:`_engine.Engine.has_table` method.


 .. change::
     :tags: bug, regression, sql
     :tickets: 6249

     Fixed regression where the :class:`_sql.BindParameter` object would not
     properly render for an IN expression (i.e. using the "post compile" feature
     in 1.4) if the object were copied from either an internal cloning
     operation, or from a pickle operation, and the parameter name contained
     spaces or other special characters.

 .. change::
     :tags: bug, mypy
     :tickets: 6205

     Revised the fix for ``OrderingList`` from version 1.4.7 which was testing
     against the incorrect API.

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

     Fix typo that prevented setting the ``bind`` attribute of an
     :class:`_asyncio.AsyncSession` to the correct value.

 .. change::
     :tags: feature, sql
     :tickets: 3314

     The tuple returned by :attr:`.CursorResult.inserted_primary_key` is now a
     :class:`_result.Row` object with a named tuple interface on top of the
     existing tuple interface.




 .. change::
     :tags: bug, regression, sql, sqlite
     :tickets: 6254

     Fixed regression where the introduction of the INSERT syntax "INSERT...
     VALUES (DEFAULT)" was not supported on some backends that do however
     support "INSERT..DEFAULT VALUES", including SQLite. The two syntaxes are
     now each individually supported or non-supported for each dialect, for
     example MySQL supports "VALUES (DEFAULT)" but not "DEFAULT VALUES".
     Support for Oracle has also been enabled.

 .. change::
     :tags: bug, regression, orm
     :tickets: 6259

     Fixed a cache leak involving the :func:`_orm.with_expression` loader
     option, where the given SQL expression would not be correctly considered as
     part of the cache key.

     Additionally, fixed regression involving the corresponding
     :func:`_orm.query_expression` feature. While the bug technically exists in
     1.3 as well, it was not exposed until 1.4. The "default expr" value of
     ``null()`` would be rendered when not needed, and additionally was also not
     adapted correctly when the ORM rewrites statements such as when using
     joined eager loading. The fix ensures "singleton" expressions like ``NULL``
     and ``true`` aren't "adapted" to refer to columns in ORM statements, and
     additionally ensures that a :func:`_orm.query_expression` with no default
     expression doesn't render in the statement if a
     :func:`_orm.with_expression` isn't used.

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

     Fixed issue in the new feature of :meth:`_orm.Session.refresh` introduced
     by :ticket:`1763` where eagerly loaded relationships are also refreshed,
     where the ``lazy="raise"`` and ``lazy="raise_on_sql"`` loader strategies
     would interfere with the :func:`_orm.immediateload` loader strategy, thus
     breaking the feature for relationships that were loaded with
     :func:`_orm.selectinload`, :func:`_orm.subqueryload` as well.

.. changelog::

1.4.7

:released: April 9, 2021

 .. change::
     :tags: bug, sql, regression
     :tickets: 6222

     Enhanced the "expanding" feature used for :meth:`_sql.ColumnOperators.in_`
     operations to infer the type of expression from the right hand list of
     elements, if the left hand side does not have any explicit type set up.
     This allows the expression to support stringification among other things.
     In 1.3, "expanding" was not automatically used for
     :meth:`_sql.ColumnOperators.in_` expressions, so in that sense this change
     fixes a behavioral regression.


 .. change::
     :tags: bug, mypy

     Fixed issue in Mypy plugin where the plugin wasn’t inferring the correct
     type for columns of subclasses that don’t directly descend from
     ``TypeEngine``, in particular that of  ``TypeDecorator`` and
     ``UserDefinedType``.

 .. change::
     :tags: bug, orm, regression
     :tickets: 6221

     Fixed regression where the :func:`_orm.subqueryload` loader strategy would
     fail to correctly accommodate sub-options, such as a :func:`_orm.defer`
     option on a column, if the "path" of the subqueryload were more than one
     level deep.


 .. change::
     :tags: bug, sql

     Fixed the "stringify" compiler to support a basic stringification
     of a "multirow" INSERT statement, i.e. one with multiple tuples
     following the VALUES keyword.


 .. change::
     :tags: bug, orm, regression
     :tickets: 6211

     Fixed regression where the :func:`_orm.merge_frozen_result` function relied
     upon by the dogpile.caching example was not included in tests and began
     failing due to incorrect internal arguments.

 .. change::
     :tags: bug, engine, regression
     :tickets: 6218

     Fixed up the behavior of the :class:`_result.Row` object when dictionary
     access is used upon it, meaning converting to a dict via ``dict(row)`` or
     accessing members using strings or other objects i.e. ``row["some_key"]``
     works as it would with a dictionary, rather than raising ``TypeError`` as
     would be the case with a tuple, whether or not the C extensions are in
     place. This was originally supposed to emit a 2.0 deprecation warning for
     the "non-future" case using :class:`_result.LegacyRow`, and was to raise
     ``TypeError`` for the "future" :class:`_result.Row` class. However, the C
     version of :class:`_result.Row` was failing to raise this ``TypeError``,
     and to complicate matters, the :meth:`_orm.Session.execute` method now
     returns :class:`_result.Row` in all cases to maintain consistency with the
     ORM result case, so users who didn't have C extensions installed would
     see different behavior in this one case for existing pre-1.4 style
     code.

     Therefore, in order to soften the overall upgrade scheme as most users have
     not been exposed to the more strict behavior of :class:`_result.Row` up
     through 1.4.6, :class:`_result.LegacyRow` and :class:`_result.Row` both
     provide for string-key access as well as support for ``dict(row)``, in all
     cases emitting the 2.0 deprecation warning when ``SQLALCHEMY_WARN_20`` is
     enabled. The :class:`_result.Row` object still uses tuple-like behavior for
     ``__contains__``, which is probably the only noticeable behavioral change
     compared to :class:`_result.LegacyRow`, other than the removal of
     dictionary-style methods ``values()`` and ``items()``.

 .. change::
     :tags: bug, regression, orm
     :tickets: 6233

     Fixed critical regression where the :class:`_orm.Session` could fail to
     "autobegin" a new transaction when a flush occurred without an existing
     transaction in place, implicitly placing the :class:`_orm.Session` into
     legacy autocommit mode which commit the transaction. The
     :class:`_orm.Session` now has a check that will prevent this condition from
     occurring, in addition to repairing the flush issue.

     Additionally, scaled back part of the change made as part of :ticket:`5226`
     which can run autoflush during an unexpire operation, to not actually
     do this in the case of a :class:`_orm.Session` using legacy
     :paramref:`_orm.Session.autocommit` mode, as this incurs a commit within
     a refresh operation.

 .. change::
     :tags: change, tests

     Added a new flag to :class:`.DefaultDialect` called ``supports_schemas``;
     third party dialects may set this flag to ``False`` to disable SQLAlchemy's
     schema-level tests when running the test suite for a third party dialect.

 .. change::
     :tags: bug, regression, schema
     :tickets: 6216

     Fixed regression where usage of a token in the
     :paramref:`_engine.Connection.execution_options.schema_translate_map`
     dictionary which contained special characters such as braces would fail to
     be substituted properly. Use of square bracket characters ``[]`` is now
     explicitly disallowed as these are used as a delimiter character in the
     current implementation.

 .. change::
     :tags: bug, regression, orm
     :tickets: 6215

     Fixed regression where the ORM compilation scheme would assume the function
     name of a hybrid property would be the same as the attribute name in such a
     way that an ``AttributeError`` would be raised, when it would attempt to
     determine the correct name for each element in a result tuple. A similar
     issue exists in 1.3 but only impacts the names of tuple rows. The fix here
     adds a check that the hybrid's function name is actually present in the
     ``__dict__`` of the class or its superclasses before assigning this name;
     otherwise, the hybrid is considered to be "unnamed" and ORM result tuples
     will use the naming scheme of the underlying expression.

 .. change::
     :tags: bug, orm, regression
     :tickets: 6232

     Fixed critical regression caused by the new feature added as part of
     :ticket:`1763`, eager loaders are invoked on unexpire operations. The new
     feature makes use of the "immediateload" eager loader strategy as a
     substitute for a collection loading strategy, which unlike the other
     "post-load" strategies was not accommodating for recursive invocations
     between mutually-dependent relationships, leading to recursion overflow
     errors.


.. changelog::

1.4.6

:released: April 6, 2021

 .. change::
     :tags: bug, sql, regression, oracle, mssql
     :tickets: 6202

     Fixed further regressions in the same area as that of :ticket:`6173` released in
     1.4.5, where a "postcompile" parameter, again most typically those used for
     LIMIT/OFFSET rendering in Oracle and SQL Server, would fail to be processed
     correctly if the same parameter rendered in multiple places in the
     statement.



 .. change::
     :tags: bug, orm, regression
     :tickets: 6203

     Fixed regression where a deprecated form of :meth:`_orm.Query.join` were
     used, passing a series of entities to join from without any ON clause in a
     single :meth:`_orm.Query.join` call, would fail to function correctly.

 .. change::
     :tags: bug, mypy
     :tickets: 6147

     Applied a series of refactorings and fixes to accommodate for Mypy
     "incremental" mode across multiple files, which previously was not taken
     into account. In this mode the Mypy plugin has to accommodate Python
     datatypes expressed in other files coming in with less information than
     they have on a direct run.

     Additionally, a new decorator :func:`_orm.declarative_mixin` is added,
     which is necessary for the Mypy plugin to be able to definifitely identify
     a Declarative mixin class that is otherwise not used inside a particular
     Python file.

     .. seealso::

         :ref:`mypy_declarative_mixins`


 .. change::
     :tags: bug, mypy
     :tickets: 6205

     Fixed issue where the Mypy plugin would fail to interpret the
     "collection_class" of a relationship if it were a callable and not a class.
     Also improved type matching and error reporting for collection-oriented
     relationships.


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

     Executing a :class:`_sql.Subquery` using :meth:`_engine.Connection.execute`
     is deprecated and will emit a deprecation warning; this use case was an
     oversight that should have been removed from 1.4. The operation will now
     execute the underlying :class:`_sql.Select` object directly for backwards
     compatibility. Similarly, the :class:`_sql.CTE` class is also not
     appropriate for execution. In 1.3, attempting to execute a CTE would result
     in an invalid "blank" SQL statement being executed; since this use case was
     not working it now raises :class:`_exc.ObjectNotExecutableError`.
     Previously, 1.4 was attempting to execute the CTE as a statement however it
     was working only erratically.

 .. change::
     :tags: bug, regression, orm
     :tickets: 6206

     Fixed critical regression where the :meth:`_orm.Query.yield_per` method in
     the ORM would set up the internal :class:`_engine.Result` to yield chunks
     at a time, however made use of the new :meth:`_engine.Result.unique` method
     which uniques across the entire result. This would lead to lost rows since
     the ORM is using ``id(obj)`` as the uniquing function, which leads to
     repeated identifiers for new objects as already-seen objects are garbage
     collected. 1.3's behavior here was to "unique" across each chunk, which
     does not actually produce "uniqued" results when results are yielded in
     chunks. As the :meth:`_orm.Query.yield_per` method is already explicitly
     disallowed when joined eager loading is in place, which is the primary
     rationale for the "uniquing" feature, the "uniquing" feature is now turned
     off entirely when :meth:`_orm.Query.yield_per` is used.

     This regression only applies to the legacy :class:`_orm.Query` object; when
     using :term:`2.0 style` execution, "uniquing" is not automatically applied.
     To prevent the issue from arising from explicit use of
     :meth:`_engine.Result.unique`, an error is now raised if rows are fetched
     from a "uniqued" ORM-level :class:`_engine.Result` if any
     :ref:`yield per <orm_queryguide_yield_per>` API is also in use, as the
     purpose of ``yield_per`` is to allow for arbitrarily large numbers of rows,
     which cannot be uniqued in memory without growing the number of entries to
     fit the complete result size.


 .. change::
     :tags: usecase, asyncio, postgresql
     :tickets: 6199

     Added accessors ``.sqlstate`` and synonym ``.pgcode`` to the ``.orig``
     attribute of the SQLAlchemy exception class raised by the asyncpg DBAPI
     adapter, that is, the intermediary exception object that wraps on top of
     that raised by the asyncpg library itself, but below the level of the
     SQLAlchemy dialect.

.. changelog::

1.4.5

:released: April 2, 2021

 .. change::
     :tags: bug, sql, postgresql
     :tickets: 6183

     Fixed bug in new :meth:`_functions.FunctionElement.render_derived` feature
     where column names rendered out explicitly in the alias SQL would not have
     proper quoting applied for case sensitive names and other non-alphanumeric
     names.

 .. change::
     :tags: bug, regression, orm
     :tickets: 6172

     Fixed regression where the :func:`_orm.joinedload` loader strategy would
     not successfully joinedload to a mapper that is mapper against a
     :class:`.CTE` construct.

 .. change::
     :tags: bug, regression, sql
     :tickets: 6181

     Fixed regression where use of the :meth:`.Operators.in_` method with a
     :class:`_sql.Select` object against a non-table-bound column would produce
     an ``AttributeError``, or more generally using a :class:`_sql.ScalarSelect`
     that has no datatype in a binary expression would produce invalid state.


 .. change::
     :tags: bug, mypy
     :tickets: sqlalchemy/sqlalchemy2-stubs/14

     Fixed issue in mypy plugin where newly added support for
     :func:`_orm.as_declarative` needed to more fully add the
     ``DeclarativeMeta`` class to the mypy interpreter's state so that it does
     not result in a name not found error; additionally improves how global
     names are setup for the plugin including the ``Mapped`` name.


 .. change::
     :tags: bug, mysql, regression
     :tickets: 6163

     Fixed regression in the MySQL dialect where the reflection query used to
     detect if a table exists would fail on very old MySQL 5.0 and 5.1 versions.

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

     Added a new flag to the :class:`_engine.Dialect` class called
     :attr:`_engine.Dialect.supports_statement_cache`. This flag now needs to be present
     directly on a dialect class in order for SQLAlchemy's
     :ref:`query cache <sql_caching>` to take effect for that dialect. The
     rationale is based on discovered issues such as :ticket:`6173` revealing
     that dialects which hardcode literal values from the compiled statement,
     often the numerical parameters used for LIMIT / OFFSET, will not be
     compatible with caching until these dialects are revised to use the
     parameters present in the statement only. For third party dialects where
     this flag is not applied, the SQL logging will show the message "dialect
     does not support caching", indicating the dialect should seek to apply this
     flag once they have verified that no per-statement literal values are being
     rendered within the compilation phase.

     .. seealso::

       :ref:`engine_thirdparty_caching`

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

     Fixed typo in the fix for :ticket:`6099` released in 1.4.4 that completely
     prevented this change from working correctly, i.e. the error message did not match
     what was actually emitted by pg8000.

 .. change::
     :tags: bug, orm, regression
     :tickets: 6171

     Scaled back the warning message added in :ticket:`5171` to not warn for
     overlapping columns in an inheritance scenario where a particular
     relationship is local to a subclass and therefore does not represent an
     overlap.

 .. change::
     :tags: bug, regression, oracle
     :tickets: 6173

     Fixed critical regression where the Oracle compiler would not maintain the
     correct parameter values in the LIMIT/OFFSET for a select due to a caching
     issue.


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

     Fixed issue where the PostgreSQL :class:`.PGInspector`, when generated
     against an :class:`_engine.Engine`, would fail for ``.get_enums()``,
     ``.get_view_names()``, ``.get_foreign_table_names()`` and
     ``.get_table_oid()`` when used against a "future" style engine and not the
     connection directly.

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

     Introduce a new parameter :paramref:`_types.Enum.omit_aliases` in
     :class:`_types.Enum` type allow filtering aliases when using a pep435 Enum.
     Previous versions of SQLAlchemy kept aliases in all cases, creating
     database enum type with additional states, meaning that they were treated
     as different values in the db. For backward compatibility this flag
     defaults to ``False`` in the 1.4 series, but will be switched to ``True``
     in a future version. A deprecation warning is raise if this flag is not
     specified and the passed enum contains aliases.

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

     Fixed a regression in MSSQL 2012+ that prevented the order by clause
     to be rendered when ``offset=0`` is used in a subquery.

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


     Fixed issue where the asyncio extension could not be loaded
     if running Python 3.6 with the backport library of
     ``contextvars`` installed.

.. changelog::

1.4.4

:released: March 30, 2021

 .. change::
     :tags: bug, misc

     Adjusted the usage of the ``importlib_metadata`` library for loading
     setuptools entrypoints in order to accommodate for some deprecation
     changes.


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

     Modified the ``is_disconnect()`` handler for the pg8000 dialect, which now
     accommodates for a new ``InterfaceError`` emitted by pg8000 1.19.0. Pull
     request courtesy Hamdi Burak Usul.


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

     Fixed critical issue in the new :meth:`_orm.PropComparator.and_` feature
     where loader strategies that emit secondary SELECT statements such as
     :func:`_orm.selectinload` and :func:`_orm.lazyload` would fail to
     accommodate for bound parameters in the user-defined criteria in terms of
     the current statement being executed, as opposed to the cached statement,
     causing stale bound values to be used.

     This also adds a warning for the case where an object that uses
     :func:`_orm.lazyload` in conjunction with :meth:`_orm.PropComparator.and_`
     is attempted to be serialized; the loader criteria cannot reliably
     be serialized and deserialized and eager loading should be used for this
     case.


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

     Repair wrong arguments to exception handling method
     in CursorResult.

 .. change::
     :tags: bug, regression, orm
     :tickets: 6144

     Fixed missing method :meth:`_orm.Session.get` from the
     :class:`_orm.ScopedSession` interface.


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

     Modified the context manager used by :class:`_engine.Transaction` so that
     an "already detached" warning is not emitted by the ending of the context
     manager itself, if the transaction were already manually rolled back inside
     the block. This applies to regular transactions, savepoint transactions,
     and legacy "marker" transactions. A warning is still emitted if the
     ``.rollback()`` method is called explicitly more than once.

.. changelog::
Links

@coveralls
Copy link

Coverage Status

Coverage remained the same at 86.667% when pulling 7c72ef2 on pyup-update-sqlalchemy-1.4.3-to-1.4.11 into e3b6dee on master.

@pyup-bot
Copy link
Collaborator Author

Closing this in favor of #290

@pyup-bot pyup-bot closed this Apr 30, 2021
@avara1986 avara1986 deleted the pyup-update-sqlalchemy-1.4.3-to-1.4.11 branch April 30, 2021 13:06
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.

3 participants