from ..sql.dml import UpdateDMLState
from ..sql.elements import BooleanClauseList
from ..sql.selectable import LABEL_STYLE_TABLENAME_PLUS_COL
+from ..util.typing import Literal
if TYPE_CHECKING:
from .mapper import Mapper
_O = TypeVar("_O", bound=object)
+_SynchronizeSessionArgument = Literal[False, "evaluate", "fetch"]
+
+
def _bulk_insert(
mapper: Mapper[_O],
mappings: Union[Iterable[InstanceState[_O]], Iterable[Dict[str, Any]]],
from ._typing import _InternalEntityType
from .mapper import Mapper
from .path_registry import PathRegistry
+ from .persistence import _SynchronizeSessionArgument
from .session import _PKIdentityArgument
from .session import Session
from .state import InstanceState
self._legacy_from_self(col).enable_eagerloads(False).scalar()
)
- def delete(self, synchronize_session: str = "evaluate") -> int:
+ def delete(
+ self, synchronize_session: _SynchronizeSessionArgument = "evaluate"
+ ) -> int:
r"""Perform a DELETE with an arbitrary WHERE clause.
Deletes rows matched by this query from the database.
def update(
self,
values: Dict[_DMLColumnArgument, Any],
- synchronize_session: str = "evaluate",
+ synchronize_session: _SynchronizeSessionArgument = "evaluate",
update_args: Optional[Dict[Any, Any]] = None,
) -> int:
r"""Perform an UPDATE with an arbitrary WHERE clause.
# EXPECTED_TYPE: List[Row[Tuple[int]]]
reveal_type(rows2)
+ # test #8280
+
+ sess.query(User).update(
+ {"name": User.name + " some name"}, synchronize_session="fetch"
+ )
+ sess.query(User).update(
+ {"name": User.name + " some name"}, synchronize_session=False
+ )
+ sess.query(User).update(
+ {"name": User.name + " some name"}, synchronize_session="evaluate"
+ )
+
+ sess.query(User).update(
+ {"name": User.name + " some name"},
+ # EXPECTED_MYPY: Argument "synchronize_session" to "update" of "Query" has incompatible type # noqa: E501
+ synchronize_session="invalid",
+ )
+ sess.query(User).update({"name": User.name + " some name"})
+
# more result tests in typed_results.py