From 3b8123965bca6b854ccdeca79713b27136233d9a Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 26 Feb 2023 15:34:57 -0500 Subject: use read-only Mapping for values dictionary type Improved typing for the mapping passed to :meth:`.UpdateBase.values` to be more open-ended about collection type, by indicating read-only ``Mapping`` instead of writeable ``Dict``, the latter of which would error out under typing tools on too limited of a key type. Fixes: #9376 Change-Id: Ib7fdbba05ca7e1082409e1b5616e6a010262f032 --- lib/sqlalchemy/sql/_typing.py | 4 ++++ lib/sqlalchemy/sql/dml.py | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'lib/sqlalchemy/sql') diff --git a/lib/sqlalchemy/sql/_typing.py b/lib/sqlalchemy/sql/_typing.py index 6bf9a5a1f..a828d6a0f 100644 --- a/lib/sqlalchemy/sql/_typing.py +++ b/lib/sqlalchemy/sql/_typing.py @@ -11,6 +11,7 @@ import operator from typing import Any from typing import Callable from typing import Dict +from typing import Mapping from typing import Set from typing import Tuple from typing import Type @@ -238,6 +239,9 @@ the DMLColumnRole to be able to accommodate. """ +_DMLKey = TypeVar("_DMLKey", bound=_DMLColumnArgument) +_DMLColumnKeyMapping = Mapping[_DMLKey, Any] + _DDLColumnArgument = Union[str, "Column[Any]", roles.DDLConstraintColumnRole] """DDL column. diff --git a/lib/sqlalchemy/sql/dml.py b/lib/sqlalchemy/sql/dml.py index 9042fdff7..dbbf09f1b 100644 --- a/lib/sqlalchemy/sql/dml.py +++ b/lib/sqlalchemy/sql/dml.py @@ -72,6 +72,7 @@ if TYPE_CHECKING: from ._typing import _ColumnExpressionArgument from ._typing import _ColumnsClauseArgument from ._typing import _DMLColumnArgument + from ._typing import _DMLColumnKeyMapping from ._typing import _DMLTableArgument from ._typing import _T0 # noqa from ._typing import _T1 # noqa @@ -944,7 +945,7 @@ class ValuesBase(UpdateBase): def values( self, *args: Union[ - Dict[_DMLColumnArgument, Any], + _DMLColumnKeyMapping[Any], Sequence[Any], ], **kwargs: Any, -- cgit v1.2.1