Skip to content

Commit 037c051

Browse files
seriaatipre-commit-ci[bot]svlandegYuriiMotov
authored
✨ Add overload for exec method to support insert, update, delete statements (#1342)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sofie Van Landeghem <[email protected]> Co-authored-by: Motov Yurii <[email protected]>
1 parent b8c0e16 commit 037c051

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

sqlmodel/ext/asyncio/session.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@
1212
)
1313

1414
from sqlalchemy import util
15+
from sqlalchemy.engine.cursor import CursorResult
1516
from sqlalchemy.engine.interfaces import _CoreAnyExecuteParams
1617
from sqlalchemy.engine.result import Result, ScalarResult, TupleResult
1718
from sqlalchemy.ext.asyncio import AsyncSession as _AsyncSession
1819
from sqlalchemy.ext.asyncio.result import _ensure_sync_result
1920
from sqlalchemy.ext.asyncio.session import _EXECUTE_OPTIONS
2021
from sqlalchemy.orm._typing import OrmExecuteOptionsParameter
2122
from sqlalchemy.sql.base import Executable as _Executable
23+
from sqlalchemy.sql.dml import UpdateBase
2224
from sqlalchemy.util.concurrency import greenlet_spawn
2325
from typing_extensions import deprecated
2426

@@ -57,20 +59,35 @@ async def exec(
5759
_add_event: Optional[Any] = None,
5860
) -> ScalarResult[_TSelectParam]: ...
5961

62+
@overload
63+
async def exec(
64+
self,
65+
statement: UpdateBase,
66+
*,
67+
params: Optional[Union[Mapping[str, Any], Sequence[Mapping[str, Any]]]] = None,
68+
execution_options: Mapping[str, Any] = util.EMPTY_DICT,
69+
bind_arguments: Optional[Dict[str, Any]] = None,
70+
_parent_execute_state: Optional[Any] = None,
71+
_add_event: Optional[Any] = None,
72+
) -> CursorResult[Any]: ...
73+
6074
async def exec(
6175
self,
6276
statement: Union[
6377
Select[_TSelectParam],
6478
SelectOfScalar[_TSelectParam],
6579
Executable[_TSelectParam],
80+
UpdateBase,
6681
],
6782
*,
6883
params: Optional[Union[Mapping[str, Any], Sequence[Mapping[str, Any]]]] = None,
6984
execution_options: Mapping[str, Any] = util.EMPTY_DICT,
7085
bind_arguments: Optional[Dict[str, Any]] = None,
7186
_parent_execute_state: Optional[Any] = None,
7287
_add_event: Optional[Any] = None,
73-
) -> Union[TupleResult[_TSelectParam], ScalarResult[_TSelectParam]]:
88+
) -> Union[
89+
TupleResult[_TSelectParam], ScalarResult[_TSelectParam], CursorResult[Any]
90+
]:
7491
if execution_options:
7592
execution_options = util.immutabledict(execution_options).union(
7693
_EXECUTE_OPTIONS

sqlmodel/orm/session.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
)
1111

1212
from sqlalchemy import util
13+
from sqlalchemy.engine.cursor import CursorResult
1314
from sqlalchemy.engine.interfaces import _CoreAnyExecuteParams
1415
from sqlalchemy.engine.result import Result, ScalarResult, TupleResult
1516
from sqlalchemy.orm import Query as _Query
1617
from sqlalchemy.orm import Session as _Session
1718
from sqlalchemy.orm._typing import OrmExecuteOptionsParameter
1819
from sqlalchemy.sql._typing import _ColumnsClauseArgument
1920
from sqlalchemy.sql.base import Executable as _Executable
21+
from sqlalchemy.sql.dml import UpdateBase
2022
from sqlmodel.sql.base import Executable
2123
from sqlmodel.sql.expression import Select, SelectOfScalar
2224
from typing_extensions import deprecated
@@ -49,20 +51,35 @@ def exec(
4951
_add_event: Optional[Any] = None,
5052
) -> ScalarResult[_TSelectParam]: ...
5153

54+
@overload
55+
def exec(
56+
self,
57+
statement: UpdateBase,
58+
*,
59+
params: Optional[Union[Mapping[str, Any], Sequence[Mapping[str, Any]]]] = None,
60+
execution_options: Mapping[str, Any] = util.EMPTY_DICT,
61+
bind_arguments: Optional[Dict[str, Any]] = None,
62+
_parent_execute_state: Optional[Any] = None,
63+
_add_event: Optional[Any] = None,
64+
) -> CursorResult[Any]: ...
65+
5266
def exec(
5367
self,
5468
statement: Union[
5569
Select[_TSelectParam],
5670
SelectOfScalar[_TSelectParam],
5771
Executable[_TSelectParam],
72+
UpdateBase,
5873
],
5974
*,
6075
params: Optional[Union[Mapping[str, Any], Sequence[Mapping[str, Any]]]] = None,
6176
execution_options: Mapping[str, Any] = util.EMPTY_DICT,
6277
bind_arguments: Optional[Dict[str, Any]] = None,
6378
_parent_execute_state: Optional[Any] = None,
6479
_add_event: Optional[Any] = None,
65-
) -> Union[TupleResult[_TSelectParam], ScalarResult[_TSelectParam]]:
80+
) -> Union[
81+
TupleResult[_TSelectParam], ScalarResult[_TSelectParam], CursorResult[Any]
82+
]:
6683
results = super().execute(
6784
statement,
6885
params=params,

0 commit comments

Comments
 (0)