]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Note for history methods that history is reset per-flush.
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 9 Feb 2019 17:22:39 +0000 (12:22 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 9 Feb 2019 17:23:08 +0000 (12:23 -0500)
Change-Id: I9bc4d0ddfa93f13e6717b89fa9934f1b8052147f
(cherry picked from commit 833583458c69e24e797c300c934da0ff04348db5)

lib/sqlalchemy/orm/attributes.py
lib/sqlalchemy/orm/state.py

index 61647a7b796ae714b70b9a1d8c1ea37fb9c6b189..07b06740121fe7c0835528f56411ecb87144eb71 100644 (file)
@@ -1414,6 +1414,17 @@ def get_history(obj, key, passive=PASSIVE_OFF):
     """Return a :class:`.History` record for the given object
     and attribute key.
 
+    This is the **pre-flush** history for a given attribute, which is
+    reset each time the :class:`.Session` flushes changes to the
+    current database transaction.
+
+    .. note::
+
+        Prefer to use the :attr:`.AttributeState.history` and
+        :meth:`.AttributeState.load_history` accessors to retrieve the
+        :class:`.History` for instance attributes.
+
+
     :param obj: an object whose class is instrumented by the
       attributes package.
 
@@ -1425,6 +1436,13 @@ def get_history(obj, key, passive=PASSIVE_OFF):
        :attr:`.PASSIVE_OFF` indicating all necessary SQL
        should be emitted.
 
+    .. seealso::
+
+        :attr:`.AttributeState.history`
+
+        :meth:`.AttributeState.load_history` - retrieve history
+        using loader callables if the value is not locally present.
+
     """
     if passive is True:
         util.warn_deprecated("Passing True for 'passive' is deprecated. "
index fb6d25a7f4ed0755de876ed8126b2fed21cfe9e8..9929532af23e59a3583f59112771face6b4072d5 100644 (file)
@@ -784,12 +784,21 @@ class AttributeState(object):
 
     @property
     def history(self):
-        """Return the current pre-flush change history for
+        """Return the current **pre-flush** change history for
         this attribute, via the :class:`.History` interface.
 
         This method will **not** emit loader callables if the value of the
         attribute is unloaded.
 
+        .. note::
+
+            The attribute history system tracks changes on a **per flush
+            basis**. Each time the :class:`.Session` is flushed, the history
+            of each attribute is reset to empty.   The :class:`.Session` by
+            default autoflushes each time a :class:`.Query` is invoked.  For
+            options on how to control this, see :ref:`session_flushing`.
+
+
         .. seealso::
 
             :meth:`.AttributeState.load_history` - retrieve history
@@ -802,12 +811,20 @@ class AttributeState(object):
                                       PASSIVE_NO_INITIALIZE)
 
     def load_history(self):
-        """Return the current pre-flush change history for
+        """Return the current **pre-flush** change history for
         this attribute, via the :class:`.History` interface.
 
         This method **will** emit loader callables if the value of the
         attribute is unloaded.
 
+        .. note::
+
+            The attribute history system tracks changes on a **per flush
+            basis**. Each time the :class:`.Session` is flushed, the history
+            of each attribute is reset to empty.   The :class:`.Session` by
+            default autoflushes each time a :class:`.Query` is invoked.  For
+            options on how to control this, see :ref:`session_flushing`.
+
         .. seealso::
 
             :attr:`.AttributeState.history`