summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/interfaces.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-09-26 14:38:44 -0400
committermike bayer <mike_mp@zzzcomputing.com>2022-10-06 00:36:25 +0000
commit276349200c486eee108471b888acfc47ea19201b (patch)
tree7441fa3219f21b18c6e532bd85b25c2bbdae86f8 /lib/sqlalchemy/orm/interfaces.py
parent566cccc8645be99a23811c39d43481d7248628b0 (diff)
downloadsqlalchemy-276349200c486eee108471b888acfc47ea19201b.tar.gz
implement write-only colletions, typing for dynamic
For 2.0, we provide a truly "larger than memory collection" implementation, a write-only collection that will never under any circumstances implicitly load the entire collection, even during flush. This is essentially a much more "strict" version of the "dynamic" loader, which in fact has a lot of scenarios that it loads the full backing collection into memory, mostly defeating its purpose. Typing constructs are added that support both the new feature WriteOnlyMapping as well as the legacy feature DynamicMapping. These have been integrated with "annotion based mapping" so that relationship() uses these annotations to configure the loader strategy as well. additional changes: * the docs triggered a conflict in hybrid's "transformers" section, this section is hard-coded to Query using a pattern that doesnt seem to have any use and isn't part of the current select() interface, so just removed this section * As the docs for WriteOnlyMapping are very long, collections.rst is broken up into two pages now. Fixes: #6229 Fixes: #7123 Change-Id: I6929f3da6e441cad92285e7309030a9bac4e429d
Diffstat (limited to 'lib/sqlalchemy/orm/interfaces.py')
-rw-r--r--lib/sqlalchemy/orm/interfaces.py2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/sqlalchemy/orm/interfaces.py b/lib/sqlalchemy/orm/interfaces.py
index b3fbe6ba7..9903c5f4a 100644
--- a/lib/sqlalchemy/orm/interfaces.py
+++ b/lib/sqlalchemy/orm/interfaces.py
@@ -77,6 +77,7 @@ if typing.TYPE_CHECKING:
from ._typing import _InternalEntityType
from ._typing import _ORMAdapterProto
from .attributes import InstrumentedAttribute
+ from .base import Mapped
from .context import _MapperEntity
from .context import ORMCompileState
from .context import QueryContext
@@ -157,6 +158,7 @@ class _IntrospectsAnnotations:
registry: RegistryType,
cls: Type[Any],
key: str,
+ mapped_container: Optional[Type[Mapped[Any]]],
annotation: Optional[_AnnotationScanType],
extracted_mapped_annotation: Optional[_AnnotationScanType],
is_dataclass_field: bool,