Coverage for sqlmodel / orm / session.py: 100%
29 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-11-09 00:02 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-11-09 00:02 +0000
1from collections.abc import Mapping, Sequence 1abcgdhefi
2from typing import ( 1abcgdhefi
3 Any,
4 TypeVar,
5 overload,
6)
8from sqlalchemy import util 1abcgdhefi
9from sqlalchemy.engine.cursor import CursorResult 1abcgdhefi
10from sqlalchemy.engine.interfaces import _CoreAnyExecuteParams 1abcgdhefi
11from sqlalchemy.engine.result import Result, ScalarResult, TupleResult 1abcgdhefi
12from sqlalchemy.orm import Query as _Query 1abcgdhefi
13from sqlalchemy.orm import Session as _Session 1abcgdhefi
14from sqlalchemy.orm._typing import OrmExecuteOptionsParameter 1abcgdhefi
15from sqlalchemy.sql._typing import _ColumnsClauseArgument 1abcgdhefi
16from sqlalchemy.sql.base import Executable as _Executable 1abcgdhefi
17from sqlalchemy.sql.dml import UpdateBase 1abcgdhefi
18from sqlmodel.sql.base import Executable 1abcgdhefi
19from sqlmodel.sql.expression import Select, SelectOfScalar 1abcgdhefi
20from typing_extensions import TypeVarTuple, Unpack, deprecated 1abcgdhefi
22_TSelectParam = TypeVar("_TSelectParam", bound=Any) 1abcgdhefi
23_Ts = TypeVarTuple("_Ts") 1abcgdhefi
26class Session(_Session): 1abcgdhefi
27 @overload 1abcgdhefi
28 def exec( 1abcgdhefi
29 self,
30 statement: Select[Unpack[_Ts]], 1abcdef
31 *,
32 params: Mapping[str, Any] | Sequence[Mapping[str, Any]] | None = None, 1abcgdhefi
33 execution_options: Mapping[str, Any] = util.EMPTY_DICT, 1abcgdhefi
34 bind_arguments: dict[str, Any] | None = None, 1abcgdhefi
35 _parent_execute_state: Any | None = None, 1abcgdhefi
36 _add_event: Any | None = None, 1abcgdhefi
37 ) -> TupleResult[tuple[Unpack[_Ts]]]: ... 1abcdef
39 @overload 1abcgdhefi
40 def exec( 1abcgdhefi
41 self,
42 statement: SelectOfScalar[_TSelectParam], 1abcdef
43 *,
44 params: Mapping[str, Any] | Sequence[Mapping[str, Any]] | None = None, 1abcgdhefi
45 execution_options: Mapping[str, Any] = util.EMPTY_DICT, 1abcgdhefi
46 bind_arguments: dict[str, Any] | None = None, 1abcgdhefi
47 _parent_execute_state: Any | None = None, 1abcgdhefi
48 _add_event: Any | None = None, 1abcgdhefi
49 ) -> ScalarResult[_TSelectParam]: ... 1abcdef
51 @overload 1abcgdhefi
52 def exec( 1abcgdhefi
53 self,
54 statement: UpdateBase, 1abcdef
55 *,
56 params: Mapping[str, Any] | Sequence[Mapping[str, Any]] | None = None, 1abcgdhefi
57 execution_options: Mapping[str, Any] = util.EMPTY_DICT, 1abcgdhefi
58 bind_arguments: dict[str, Any] | None = None, 1abcgdhefi
59 _parent_execute_state: Any | None = None, 1abcgdhefi
60 _add_event: Any | None = None, 1abcgdhefi
61 ) -> CursorResult[Unpack[tuple[Any, ...]]]: ... 1abcdef
63 def exec( 1abcgdhefi
64 self,
65 statement: Select[Unpack[_Ts]]
66 | SelectOfScalar[_TSelectParam]
67 | Executable[_TSelectParam]
68 | UpdateBase,
69 *,
70 params: Mapping[str, Any] | Sequence[Mapping[str, Any]] | None = None,
71 execution_options: Mapping[str, Any] = util.EMPTY_DICT,
72 bind_arguments: dict[str, Any] | None = None,
73 _parent_execute_state: Any | None = None,
74 _add_event: Any | None = None,
75 ) -> (
76 TupleResult[tuple[Unpack[_Ts]]]
77 | ScalarResult[_TSelectParam]
78 | CursorResult[Unpack[tuple[Any, ...]]]
79 ):
80 results = super().execute( 2FeGeT Hej k ~hU IeV W JeKeX Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( LeMeNeOePeQeReSeTe) * UeVeWel m XeYe+ , - . / : ; = ? Ze0e1e2e@ [ ] ^ 3e4e5e6e7e8e9e!e#e$e%e'e(e_ )en o ai` *e{ | +e,e} ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqb-e.e/e:e;e=e?e@e[erbsb]e^e_ep q `e{etbubvbwbxbybzbAbBb|e}e~eafCbDbEbFbbfcfdfefffgfhfifjfkflfmfnfGbofr s biHbpfIbJbqfrfKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bsftfufvfwfxfyfzfAf3b4bBfCfDft u EfFf5b6b7b8b9b!b#b$b%bGfHfIfJf'b(b)b*bKfLfMfNfOfPfQfRfSfTfUfVfWf+bXfv w ci,bYf-b.bZf0f/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdc1f2f3f4f5f6f7f8f9fecfc!f#f$fx y %f'fgchcicjckclcmcncoc(f)f*f+fpcqcrcsc,f-f.f/f:f;f=f?f@f[f]f^f_ftc`fz A diuc{fvcwc|f}fxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPc~fagbgcgdgegfggghgQcRcigjgkgB C lgmgScTcUcVcWcXcYcZc0cngogpgqg1c2c3c4crgsgtgugvgwgxgygzgAgBgCgDg5cEgD E ei6cFg7c8cGgHg9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@cIgJgKgLgMgNgOgPgQg[c]cRgSgTgF G UgVg^c_c`c{c|c}c~cadbdWgXgYgZgcdddedfd0g1g2g3g4g5g6g7g8g9g!g#g$ggd%gH I fihd'gidjd(g)gkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd*g+g,g-g.g/g:g;g=gDdEd?g@g[gJ K ]g^gFdGdHdIdJdKdLdMdNd_g`g{g|gOdPdQdRd}g~gahbhchdhehfhghhhihjhkhSdlhL M giTdmhUdVdnhohWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'dphqhrhshthuhvhwhxh(d)dyhzhAhN O BhCh*d+d,d-d.d/d:d;d=dDhEhFhGh?d@d[d]dHhIhJhKhLhMhNhOhPhQhRhShTh^dUhP Q hi_dVh`d{dWhXh|d}d~daebecedeeefegeheiejekelemeneoepeYhZh0h1h2h3h4h5h6hqere7h8h9hR S !h#hseteuevewexeyezeAe$h%h'h(hBeCeDeEe)h*h+h,h-h.h/h:h;h=h?h
81 statement,
82 params=params,
83 execution_options=execution_options,
84 bind_arguments=bind_arguments,
85 _parent_execute_state=_parent_execute_state,
86 _add_event=_add_event,
87 )
88 if isinstance(statement, SelectOfScalar): 2FeGeT Hej k U IeV W JeKeX Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( LeMeNeOePeQeReSeTe) * UeVeWel m XeYe+ , - . / : ; = ? Ze0e1e2e@ [ ] ^ 3e4e5e6e7e8e9e!e#e$e%e'e(e_ )en o ` *e{ | +e,e} ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqb-e.e/e:e;e=e?e@e[erbsb]e^e_ep q `e{etbubvbwbxbybzbAbBb|e}e~eafCbDbEbFbbfcfdfefffgfhfifjfkflfmfnfGbofr s HbpfIbJbqfrfKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bsftfufvfwfxfyfzfAf3b4bBfCfDft u EfFf5b6b7b8b9b!b#b$b%bGfHfIfJf'b(b)b*bKfLfMfNfOfPfQfRfSfTfUfVfWf+bXfv w ,bYf-b.bZf0f/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdc1f2f3f4f5f6f7f8f9fecfc!f#f$fx y %f'fgchcicjckclcmcncoc(f)f*f+fpcqcrcsc,f-f.f/f:f;f=f?f@f[f]f^f_ftc`fz A uc{fvcwc|f}fxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPc~fagbgcgdgegfggghgQcRcigjgkgB C lgmgScTcUcVcWcXcYcZc0cngogpgqg1c2c3c4crgsgtgugvgwgxgygzgAgBgCgDg5cEgD E 6cFg7c8cGgHg9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@cIgJgKgLgMgNgOgPgQg[c]cRgSgTgF G UgVg^c_c`c{c|c}c~cadbdWgXgYgZgcdddedfd0g1g2g3g4g5g6g7g8g9g!g#g$ggd%gH I hd'gidjd(g)gkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd*g+g,g-g.g/g:g;g=gDdEd?g@g[gJ K ]g^gFdGdHdIdJdKdLdMdNd_g`g{g|gOdPdQdRd}g~gahbhchdhehfhghhhihjhkhSdlhL M TdmhUdVdnhohWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'dphqhrhshthuhvhwhxh(d)dyhzhAhN O BhCh*d+d,d-d.d/d:d;d=dDhEhFhGh?d@d[d]dHhIhJhKhLhMhNhOhPhQhRhShTh^dUhP Q _dVh`d{dWhXh|d}d~daebecedeeefegeheiejekelemeneoepeYhZh0h1h2h3h4h5h6hqere7h8h9hR S !h#hseteuevewexeyezeAe$h%h'h(hBeCeDeEe)h*h+h,h-h.h/h:h;h=h?h
89 return results.scalars() 2FeGeT Hej k U IeV W Ke0 2 3 4 5 6 7 8 9 ! # $ % ' ( LeMeNeOePeQeReSeTe) * UeVeWel m XeYe+ , - . / : ; = ? Ze0e1e2e@ [ ] ^ 3e4e5e6e7e8e9e!e#e$e%e'e(e_ )en o ` *e{ | ,ebbdbebfbgbhbibjbkblbmbnbobpbqb-e.e/e:e;e=e?e@e[erbsb]e^e_ep q `e{etbubvbwbxbybzbAbBb|e}e~eafCbDbEbFbbfcfdfefffgfhfifjfkflfmfnfGbofr s HbpfIbJbrfNbPbQbRbSbTbUbVbWbXbYbZb0b1b2bsftfufvfwfxfyfzfAf3b4bBfCfDft u EfFf5b6b7b8b9b!b#b$b%bGfHfIfJf'b(b)b*bKfLfMfNfOfPfQfRfSfTfUfVfWf+bXfv w ,bYf-b.b0f=b@b[b]b^b_b`b{b|b}b~bacbcccdc1f2f3f4f5f6f7f8f9fecfc!f#f$fx y %f'fgchcicjckclcmcncoc(f)f*f+fpcqcrcsc,f-f.f/f:f;f=f?f@f[f]f^f_ftc`fz A uc{fvcwc}fAcCcDcEcFcGcHcIcJcKcLcMcNcOcPc~fagbgcgdgegfggghgQcRcigjgkgB C lgmgScTcUcVcWcXcYcZc0cngogpgqg1c2c3c4crgsgtgugvgwgxgygzgAgBgCgDg5cEgD E 6cFg7c8cHg$c'c(c)c*c+c,c-c.c/c:c;c=c?c@cIgJgKgLgMgNgOgPgQg[c]cRgSgTgF G UgVg^c_c`c{c|c}c~cadbdWgXgYgZgcdddedfd0g1g2g3g4g5g6g7g8g9g!g#g$ggd%gH I hd'gidjd)gndpdqdrdsdtdudvdwdxdydzdAdBdCd*g+g,g-g.g/g:g;g=gDdEd?g@g[gJ K ]g^gFdGdHdIdJdKdLdMdNd_g`g{g|gOdPdQdRd}g~gahbhchdhehfhghhhihjhkhSdlhL M TdmhUdVdohZd1d2d3d4d5d6d7d8d9d!d#d$d%d'dphqhrhshthuhvhwhxh(d)dyhzhAhN O BhCh*d+d,d-d.d/d:d;d=dDhEhFhGh?d@d[d]dHhIhJhKhLhMhNhOhPhQhRhShTh^dUhP Q _dVh`d{dXhaecedeeefegeheiejekelemeneoepeYhZh0h1h2h3h4h5h6hqere7h8h9hR S !h#hseteuevewexeyezeAe$h%h'h(hBeCeDeEe)h*h+h,h-h.h/h:h;h=h?h
90 return results # type: ignore 2j k JeX Y Z 1 l m n o +e} ~ abcbp q r s qfKbLbMbObt u v w Zf/b:b;b?bx y z A |fxcyczcBcB C D E Gg9c!c#c%cF G H I (gkdldmdodJ K L M nhWdXdYd0dN O P Q Wh|d}d~dbeR S
92 @deprecated( 1abcgdhefi
93 """
94 🚨 You probably want to use `session.exec()` instead of `session.execute()`.
96 This is the original SQLAlchemy `session.execute()` method that returns objects
97 of type `Row`, on which you have to call `scalars()` to get the model objects.
99 For example:
101 ```Python
102 heroes = session.execute(select(Hero)).scalars().all()
103 ```
105 Instead, you could use `exec()`:
107 ```Python
108 heroes = session.exec(select(Hero)).all()
109 ```
110 """,
111 category=None,
112 )
113 def execute( 1abcgdhefi
114 self,
115 statement: _Executable,
116 params: _CoreAnyExecuteParams | None = None,
117 *,
118 execution_options: OrmExecuteOptionsParameter = util.EMPTY_DICT,
119 bind_arguments: dict[str, Any] | None = None,
120 _parent_execute_state: Any | None = None,
121 _add_event: Any | None = None,
122 ) -> Result[Unpack[tuple[Any, ...]]]:
123 """
124 🚨 You probably want to use `session.exec()` instead of `session.execute()`.
126 This is the original SQLAlchemy `session.execute()` method that returns objects
127 of type `Row`, on which you have to call `scalars()` to get the model objects.
129 For example:
131 ```Python
132 heroes = session.execute(select(Hero)).scalars().all()
133 ```
135 Instead, you could use `exec()`:
137 ```Python
138 heroes = session.exec(select(Hero)).all()
139 ```
140 """
141 return super().execute( 2iijikiliminioipiqirisitiuiviT wij k xiyiU ziAiV W Bi@hCiDiEiFiGiX Y Z 0 1 Hi2 3 IiJiKiLiMiNi4 5 6 7 8 9 ! # $ % ' ( Oi) * l m PiQi+ , RiSi- . / : ; = ? @ [ ] ^ TiUiViWiXiYiZi0i1i2i3i4i5i6i_ 7in o 8i9i` !i#i{ | $i[h%i'i(i)i*i} ~ abbbcb+idbeb,i-i.i/i:i;ifbgbhbibjbkblbmbnbobpbqb=irbsbp q ?i@itbub[i]ivbwbxbybzbAbBbCbDbEbFb^i_i`i{i|i}i~iajbjcjdjejfjgjGbhjr s ijjjHbkjljIbJbmj]hnjojpjqjrjKbLbMbNbObsjPbQbtjujvjwjxjyjRbSbTbUbVbWbXbYbZb0b1b2bzj3b4bt u AjBj5b6bCjDj7b8b9b!b#b$b%b'b(b)b*bEjFjGjHjIjJjKjLjMjNjOjPjQjRj+bSjv w TjUj,bVjWj-b.bXj^hYjZj0j1j2j/b:b;b=b?b3j@b[b4j5j6j7j8j9j]b^b_b`b{b|b}b~bacbcccdc!jecfcx y #j$jgchc%j'jicjckclcmcncocpcqcrcsc(j)j*j+j,j-j.j/j:j;j=j?j@j[jtc]jz A ^j_juc`j{jvcwc|j_h}j~jakbkckxcyczcAcBcdkCcDcekfkgkhkikjkEcFcGcHcIcJcKcLcMcNcOcPckkQcRcB C lkmkScTcnkokUcVcWcXcYcZc0c1c2c3c4cpkqkrksktkukvkwkxkykzkAkBkCk5cDkD E EkFk6cGkHk7c8cIk`hJkKkLkMkNk9c!c#c$c%cOk'c(cPkQkRkSkTkUk)c*c+c,c-c.c/c:c;c=c?c@cVk[c]cF G WkXk^c_cYkZk`c{c|c}c~cadbdcdddedfd0k1k2k3k4k5k6k7k8k9k!k#k$k%kgd'kH I (k)khd*k+kidjd,k{h-k.k/k:k;kkdldmdndod=kpdqd?k@k[k]k^k_krdsdtdudvdwdxdydzdAdBdCd`kDdEdJ K {k|kFdGd}k~kHdIdJdKdLdMdNdOdPdQdRdalblcldlelflglhliljlklllmlnlSdolL M plqlTdrlslUdVdtl|hulvlwlxlylWdXdYdZd0dzl1d2dAlBlClDlElFl3d4d5d6d7d8d9d!d#d$d%d'dGl(d)dN O HlIl*d+dJlKl,d-d.d/d:d;d=d?d@d[d]dLlMlNlOlPlQlRlSlTlUlVlWlXlYl^dZlP Q 0l1l_d2l3l`d{d4l}h5l6l7l8l9l|d}d~daebe!lcede#l$l%l'l(l)leefegeheiejekelemeneoepe*lqereR S +l,lsete-l.luevewexeyezeAeBeCeDeEe
142 statement,
143 params=params,
144 execution_options=execution_options,
145 bind_arguments=bind_arguments,
146 _parent_execute_state=_parent_execute_state,
147 _add_event=_add_event,
148 )
150 @deprecated( 1abcgdhefi
151 """
152 🚨 You probably want to use `session.exec()` instead of `session.query()`.
154 `session.exec()` is SQLModel's own short version with improved type
155 annotations.
157 Otherwise, you might want to use `session.execute()` instead of
158 `session.query()`.
159 """
160 )
161 def query( # type: ignore 1abcgdhefi
162 self, *entities: _ColumnsClauseArgument[Any], **kwargs: Any
163 ) -> _Query[Any]:
164 """
165 🚨 You probably want to use `session.exec()` instead of `session.query()`.
167 `session.exec()` is SQLModel's own short version with improved type
168 annotations.
170 Otherwise, you might want to use `session.execute()` instead of
171 `session.query()`.
172 """
173 return super().query(*entities, **kwargs) 2@h[h]h^h_h`h{h|h}h