.. change::
    :tags: general, changed
    :tickets: 7257

    Migrated the codebase to remove all pre-2.0 behaviors and architectures
    that were previously noted as deprecated for removal in 2.0, including,
    but not limited to:

    * removal of all Python 2 code, minimum version is now Python 3.7

    * :class:`_engine.Engine` and :class:`_engine.Connection` now use the
      new 2.0 style of working, which includes "autobegin", library level
      autocommit removed, subtransactions and "branched" connections
      removed

    * Result objects use 2.0-style behaviors; :class:`_result.Row` is fully
      a named tuple without "mapping" behavior, use :class:`_result.RowMapping`
      for "mapping" behavior

    * All Unicode encoding/decoding architecture has been removed from
      SQLAlchemy.  All modern DBAPI implementations support Unicode
      transparently thanks to Python 3, so the ``convert_unicode`` feature
      as well as related mechanisms to look for bytestrings in
      DBAPI ``cursor.description`` etc. have been removed.

    * The ``.bind`` attribute and parameter from :class:`.MetaData`,
      :class:`.Table`, and from all DDL/DML/DQL elements that previously could
      refer to a "bound engine"

    * The standalone ``sqlalchemy.orm.mapper()`` function is removed; all
      classical mapping should be done through the
      :meth:`_orm.registry.map_imperatively` method of :class:`_orm.registry`.

    * The :meth:`_orm.Query.join` method no longer accepts strings for
      relationship names; the long-documented approach of using
      ``Class.attrname`` for join targets is now standard.

    * :meth:`_orm.Query.join` no longer accepts the "aliased" and
      "from_joinpoint" arguments

    * :meth:`_orm.Query.join` no longer accepts chains of multiple join
      targets in one method call.

    * ``Query.from_self()``, ``Query.select_entity_from()`` and
      ``Query.with_polymorphic()`` are removed.

    * The :paramref:`_orm.relationship.cascade_backrefs` parameter must now
      remain at its new default of ``False``; the ``save-update`` cascade
      no longer cascades along a backref.

    * the :paramref:`_orm.Session.future` parameter must always be set to
      ``True``.  2.0-style transactional patterns for :class:`_orm.Session`
      are now always in effect.

    * Loader options no longer accept strings for attribute names.  The
      long-documented approach of using ``Class.attrname`` for loader option
      targets is now standard.

    * Legacy forms of :func:`_sql.select` removed, including
      ``select([cols])``, the "whereclause" and keyword parameters of
      ``some_table.select()``.

    * Legacy "in-place mutator" methods on :class:`_sql.Select` such as
      ``append_whereclause()``, ``append_order_by()`` etc are removed.

    * Removed the very old "dbapi_proxy" module, which in very early
      SQLAlchemy releases was used to provide a transparent connection pool
      over a raw DBAPI connection.