diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-08-01 15:05:53 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-08-01 19:41:04 -0400 |
| commit | 14fdd6260a578488bdad95b738ea6af5c2fcd13c (patch) | |
| tree | 4801e916ea7e2008857dae0be86898d8adadfd1c /doc/build/errors.rst | |
| parent | 3d5a64ac09b55514da6fd30f0f085348c2d10496 (diff) | |
| download | sqlalchemy-14fdd6260a578488bdad95b738ea6af5c2fcd13c.tar.gz | |
Establish future behavior for Session cascade backrefs, bind
The behavior of the :paramref:`_orm.relationship.cascade_backrefs` flag
will be reversed in 2.0 and set to ``False`` unconditionally, such that
backrefs don't cascade save-update operations from a forwards-assignment to
a backwards assignment. A 2.0 deprecation warning is emitted when the
parameter is left at its default of ``True`` at the point at which such a
cascade operation actually takes place. The new behavior can be
established as always by setting the flag to ``False`` on a specific
:func:`_orm.relationship`, or more generally can be set up across the board
by setting the the :paramref:`_orm.Session.future` flag to True.
Additionally in the interests of expediency, this commit will also
move Session away from making use of bound metadata if the future=True
flag is set. An application that sets future=True should ideally
have to change as little else as possible for full 2.0 behavior.
Fixes: #5150
Change-Id: I490d1d61f09c62ffc2de983208aeed25dfe48aec
Diffstat (limited to 'doc/build/errors.rst')
| -rw-r--r-- | doc/build/errors.rst | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/doc/build/errors.rst b/doc/build/errors.rst index 961aa4d70..d4659101a 100644 --- a/doc/build/errors.rst +++ b/doc/build/errors.rst @@ -118,6 +118,55 @@ are part of SQLAlchemy 1.4 and are there to help migrate an application to the the 1.x series, as well as the current goals and progress of SQLAlchemy 2.0. +.. _error_c9bf: + +A bind was located via legacy bound metadata, but since future=True is set on this Session, this bind is ignored. +------------------------------------------------------------------------------------------------------------------- + +The concept of "bound metadata" is being removed in SQLAlchemy 2.0. This +refers to the :paramref:`_schema.MetaData.bind` parameter on the +:class:`_schema.MetaData` object that in turn allows objects like the ORM +:class:`_orm.Session` to associate a particular mapped class with an +:class:`_orm.Engine`. In SQLAlchemy 2.0, the :class:`_orm.Session` must be +linked to each :class:`_orm.Engine` directly. That is, instead of instantating +the :class:`_orm.Session` or +:class:`_orm.sessionmaker` without any arguments, and associating the +:class:`_engine.Engine` with the :class:`_schema.MetaData`:: + + engine = create_engine("sqlite://") + Session = sessionmaker() + metadata = MetaData(bind=engine) + Base = declarative_base(metadata=metadata) + + class MyClass(Base): + # ... + + + session = Session() + session.add(MyClass()) + session.commit() + +The :class:`_engine.Engine` must instead be associated directly with the +:class:`_orm.sessionmaker` or :class:`_orm.Session`. The +:class:`_schema.MetaData` object should no longer be associated with any +engine:: + + + engine = create_engine("sqlite://") + Session = sessionmaker(engine) + Base = declarative_base() + + class MyClass(Base): + # ... + + + session = Session() + session.add(MyClass()) + session.commit() + +In SQLAlchemy 1.4, this :term:`2.x style` behavior is enabled when the +:paramref:`_orm.Session.future` flag is set on :class:`_orm.sessionmaker` +or :class:`_orm.Session`. Connections and Transactions ============================ |
