diff options
Diffstat (limited to 'lib/sqlalchemy/orm/attributes.py')
-rw-r--r-- | lib/sqlalchemy/orm/attributes.py | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py index 5e6852cbf..65d6970a9 100644 --- a/lib/sqlalchemy/orm/attributes.py +++ b/lib/sqlalchemy/orm/attributes.py @@ -55,6 +55,7 @@ from .base import Mapped as Mapped # noqa from .base import NEVER_SET # noqa from .base import NO_AUTOFLUSH from .base import NO_CHANGE # noqa +from .base import NO_KEY from .base import NO_RAISE from .base import NO_VALUE from .base import NON_PERSISTENT_OK # noqa @@ -115,20 +116,16 @@ if TYPE_CHECKING: _T = TypeVar("_T") -class NoKey(str): - pass - - _AllPendingType = Sequence[ Tuple[Optional["InstanceState[Any]"], Optional[object]] ] -NO_KEY = NoKey("no name") - SelfQueryableAttribute = TypeVar( "SelfQueryableAttribute", bound="QueryableAttribute[Any]" ) +_UNKNOWN_ATTR_KEY = object() + @inspection._self_inspects class QueryableAttribute( @@ -327,7 +324,12 @@ class QueryableAttribute( def _memoized_attr_expression(self) -> ColumnElement[_T]: annotations: _AnnotationDict - if self.key is NO_KEY: + # applies only to Proxy() as used by hybrid. + # currently is an exception to typing rather than feeding through + # non-string keys. + # ideally Proxy() would have a separate set of methods to deal + # with this case. + if self.key is _UNKNOWN_ATTR_KEY: # type: ignore[comparison-overlap] annotations = {"entity_namespace": self._entity_namespace} else: annotations = { |