diff --git a/lib/sqlalchemy/orm/scoping.py b/lib/sqlalchemy/orm/scoping.py index 4d0a034872..bbebee5c42 100644 --- a/lib/sqlalchemy/orm/scoping.py +++ b/lib/sqlalchemy/orm/scoping.py @@ -43,7 +43,6 @@ if TYPE_CHECKING: from ._typing import OrmExecuteOptionsParameter from .identity import IdentityMap from .interfaces import ORMOption - from .mapper import Mapper from .query import Query from .query import RowReturningQuery from .session import _BindArguments @@ -1392,7 +1391,7 @@ class scoped_session(Generic[_S]): def bulk_insert_mappings( self, - mapper: Mapper[Any], + mapper: _EntityBindKey[Any], mappings: Iterable[Dict[str, Any]], return_defaults: bool = False, render_nulls: bool = False, @@ -1478,7 +1477,7 @@ class scoped_session(Generic[_S]): ) def bulk_update_mappings( - self, mapper: Mapper[Any], mappings: Iterable[Dict[str, Any]] + self, mapper: _EntityBindKey[Any], mappings: Iterable[Dict[str, Any]] ) -> None: r"""Perform a bulk update of the given list of mapping dictionaries. diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index d71d295e38..eae68db6e6 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -4742,7 +4742,7 @@ class Session(_SessionClassMethods, EventTarget): def bulk_insert_mappings( self, - mapper: Mapper[Any], + mapper: _EntityBindKey[Any], mappings: Iterable[Dict[str, Any]], return_defaults: bool = False, render_nulls: bool = False, @@ -4824,7 +4824,7 @@ class Session(_SessionClassMethods, EventTarget): ) def bulk_update_mappings( - self, mapper: Mapper[Any], mappings: Iterable[Dict[str, Any]] + self, mapper: _EntityBindKey[Any], mappings: Iterable[Dict[str, Any]] ) -> None: """Perform a bulk update of the given list of mapping dictionaries. @@ -4873,7 +4873,7 @@ class Session(_SessionClassMethods, EventTarget): def _bulk_save_mappings( self, - mapper: Mapper[_O], + mapper: _EntityBindKey[_O], mappings: Union[Iterable[InstanceState[_O]], Iterable[Dict[str, Any]]], *, isupdate: bool, diff --git a/test/typing/plain_files/orm/session.py b/test/typing/plain_files/orm/session.py index 311c522a6d..e614a39c29 100644 --- a/test/typing/plain_files/orm/session.py +++ b/test/typing/plain_files/orm/session.py @@ -10,6 +10,7 @@ from typing import Unpack from sqlalchemy import Column from sqlalchemy import create_engine from sqlalchemy import ForeignKey +from sqlalchemy import inspect from sqlalchemy import Integer from sqlalchemy import MetaData from sqlalchemy import Result @@ -120,6 +121,12 @@ with Session(e) as sess: with sess.begin() as tx: assert_type(tx, SessionTransaction) + # test #9256 + sess.bulk_insert_mappings(User, [{"id": 1, "name": "u1"}]) + sess.bulk_update_mappings(User, [{"id": 1, "name": "u1"}]) + sess.bulk_insert_mappings(inspect(User), [{"id": 2, "name": "u2"}]) + sess.bulk_update_mappings(inspect(User), [{"id": 2, "name": "u2"}]) + # more result tests in typed_results.py