Coverage for sqlmodel / orm / session.py: 100%

28 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-01-06 21:09 +0000

1from collections.abc import Mapping, Sequence 1abgcdhefi

2from typing import ( 1abgcdhefi

3 Any, 

4 Optional, 

5 TypeVar, 

6 Union, 

7 overload, 

8) 

9 

10from sqlalchemy import util 1abgcdhefi

11from sqlalchemy.engine.cursor import CursorResult 1abgcdhefi

12from sqlalchemy.engine.interfaces import _CoreAnyExecuteParams 1abgcdhefi

13from sqlalchemy.engine.result import Result, ScalarResult, TupleResult 1abgcdhefi

14from sqlalchemy.orm import Query as _Query 1abgcdhefi

15from sqlalchemy.orm import Session as _Session 1abgcdhefi

16from sqlalchemy.orm._typing import OrmExecuteOptionsParameter 1abgcdhefi

17from sqlalchemy.sql._typing import _ColumnsClauseArgument 1abgcdhefi

18from sqlalchemy.sql.base import Executable as _Executable 1abgcdhefi

19from sqlalchemy.sql.dml import UpdateBase 1abgcdhefi

20from sqlmodel.sql.base import Executable 1abgcdhefi

21from sqlmodel.sql.expression import Select, SelectOfScalar 1abgcdhefi

22from typing_extensions import deprecated 1abgcdhefi

23 

24_TSelectParam = TypeVar("_TSelectParam", bound=Any) 1abgcdhefi

25 

26 

27class Session(_Session): 1abgcdhefi

28 @overload 1abgcdhefi

29 def exec( 1abgcdhefi

30 self, 

31 statement: Select[_TSelectParam], 1abcdef

32 *, 

33 params: Optional[Union[Mapping[str, Any], Sequence[Mapping[str, Any]]]] = None, 1abgcdhefi

34 execution_options: Mapping[str, Any] = util.EMPTY_DICT, 1abgcdhefi

35 bind_arguments: Optional[dict[str, Any]] = None, 1abgcdhefi

36 _parent_execute_state: Optional[Any] = None, 1abgcdhefi

37 _add_event: Optional[Any] = None, 1abgcdhefi

38 ) -> TupleResult[_TSelectParam]: ... 1abcdef

39 

40 @overload 1abgcdhefi

41 def exec( 1abgcdhefi

42 self, 

43 statement: SelectOfScalar[_TSelectParam], 1abcdef

44 *, 

45 params: Optional[Union[Mapping[str, Any], Sequence[Mapping[str, Any]]]] = None, 1abgcdhefi

46 execution_options: Mapping[str, Any] = util.EMPTY_DICT, 1abgcdhefi

47 bind_arguments: Optional[dict[str, Any]] = None, 1abgcdhefi

48 _parent_execute_state: Optional[Any] = None, 1abgcdhefi

49 _add_event: Optional[Any] = None, 1abgcdhefi

50 ) -> ScalarResult[_TSelectParam]: ... 1abcdef

51 

52 @overload 1abgcdhefi

53 def exec( 1abgcdhefi

54 self, 

55 statement: UpdateBase, 1abcdef

56 *, 

57 params: Optional[Union[Mapping[str, Any], Sequence[Mapping[str, Any]]]] = None, 1abgcdhefi

58 execution_options: Mapping[str, Any] = util.EMPTY_DICT, 1abgcdhefi

59 bind_arguments: Optional[dict[str, Any]] = None, 1abgcdhefi

60 _parent_execute_state: Optional[Any] = None, 1abgcdhefi

61 _add_event: Optional[Any] = None, 1abgcdhefi

62 ) -> CursorResult[Any]: ... 1abcdef

63 

64 def exec( 1abgcdhefi

65 self, 

66 statement: Union[ 

67 Select[_TSelectParam], 

68 SelectOfScalar[_TSelectParam], 

69 Executable[_TSelectParam], 

70 UpdateBase, 

71 ], 

72 *, 

73 params: Optional[Union[Mapping[str, Any], Sequence[Mapping[str, Any]]]] = None, 

74 execution_options: Mapping[str, Any] = util.EMPTY_DICT, 

75 bind_arguments: Optional[dict[str, Any]] = None, 

76 _parent_execute_state: Optional[Any] = None, 

77 _add_event: Optional[Any] = None, 

78 ) -> Union[ 

79 TupleResult[_TSelectParam], ScalarResult[_TSelectParam], CursorResult[Any] 

80 ]: 

81 results = super().execute( 2eefegej heiek l jem n o p q r s t u v w x y z A B C D E kelemeneoepeqereseF G teueveH I wexeJ K L M N O P Q R yezeAeBeS T U V CeDeEeFeGeHeIeJeKeLeMeNeOePeW QeReX Y SeZ 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * TeUeVeWeXeYeZe0e1e+ , 2e3e4e- . 5e6e/ : ; = ? @ [ ] ^ 7e8e9e!e_ ` { | #e$e%e'e(e)e*e+e,e-e.e/e:e;e} =e?e~ ab@ebbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtb[e]e^e_e`e{e|e}e~eubvbafbfcfwbxbdfefybzbAbBbCbDbEbFbGbffgfhfifHbIbJbKbjfkflfmfnfofpfqfrfsftfufvfLbwfxfMbNbyfObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6bzfAfBfCfDfEfFfGfHf7b8bIfJfKf9b!bLfMf#b$b%b'b(b)b*b+b,bNfOfPfQf-b.b/b:bRfSfTfUfVfWfXfYfZf0f1f2f3f4f;b5f6f=b?b7f@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcic8f9f!f#f$f%f'f(f)fjckc*f+f,flcmc-f.fncocpcqcrcsctcucvc/f:f;f=fwcxcyczc?f@f[f]f^f_f`f{f|f}f~fagbgcgAcdgegBcCcfgDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcgghgigjgkglgmgngogWcXcpgqgrgYcZcsgtg0c1c2c3c4c5c6c7c8cugvgwgxg9c!c#c$cygzgAgBgCgDgEgFgGgHgIgJgKgLg%cMgNg'c(cOg)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|cPgQgRgSgTgUgVgWgXg}c~cYgZg0gadbd1g2gcdddedfdgdhdidjdkd3g4g5g6gldmdndod7g8g9g!g#g$g%g'g(g)g*g+g,g-gpd.g/gqdrd:gsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKd;g=g?g@g[g]g^g_g`gLdMd{g|g}gNdOd~gahPdQdRdSdTdUdVdWdXdbhchdhehYdZd0d1dfhghhhihjhkhlhmhnhohphqhrhsh2dthuh3d4dvh5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dwhxhyhzhAhBhChDhEh;d=dFhGhHh?d@dIhJh[d]d^d_d`d{d|d}d~dKhLhMhNhaebecedeOhPhQhRhShThUhVhWhXhYh

82 statement, 

83 params=params, 

84 execution_options=execution_options, 

85 bind_arguments=bind_arguments, 

86 _parent_execute_state=_parent_execute_state, 

87 _add_event=_add_event, 

88 ) 

89 if isinstance(statement, SelectOfScalar): 2eefegej heiek l jem n o p q r s t u v w x y z A B C D E kelemeneoepeqereseF G teueveH I wexeJ K L M N O P Q R yezeAeBeS T U V CeDeEeFeGeHeIeJeKeLeMeNeOePeW QeReX Y SeZ 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * TeUeVeWeXeYeZe0e1e+ , 2e3e4e- . 5e6e/ : ; = ? @ [ ] ^ 7e8e9e!e_ ` { | #e$e%e'e(e)e*e+e,e-e.e/e:e;e} =e?e~ ab@ebbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtb[e]e^e_e`e{e|e}e~eubvbafbfcfwbxbdfefybzbAbBbCbDbEbFbGbffgfhfifHbIbJbKbjfkflfmfnfofpfqfrfsftfufvfLbwfxfMbNbyfObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6bzfAfBfCfDfEfFfGfHf7b8bIfJfKf9b!bLfMf#b$b%b'b(b)b*b+b,bNfOfPfQf-b.b/b:bRfSfTfUfVfWfXfYfZf0f1f2f3f4f;b5f6f=b?b7f@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcic8f9f!f#f$f%f'f(f)fjckc*f+f,flcmc-f.fncocpcqcrcsctcucvc/f:f;f=fwcxcyczc?f@f[f]f^f_f`f{f|f}f~fagbgcgAcdgegBcCcfgDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcgghgigjgkglgmgngogWcXcpgqgrgYcZcsgtg0c1c2c3c4c5c6c7c8cugvgwgxg9c!c#c$cygzgAgBgCgDgEgFgGgHgIgJgKgLg%cMgNg'c(cOg)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|cPgQgRgSgTgUgVgWgXg}c~cYgZg0gadbd1g2gcdddedfdgdhdidjdkd3g4g5g6gldmdndod7g8g9g!g#g$g%g'g(g)g*g+g,g-gpd.g/gqdrd:gsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKd;g=g?g@g[g]g^g_g`gLdMd{g|g}gNdOd~gahPdQdRdSdTdUdVdWdXdbhchdhehYdZd0d1dfhghhhihjhkhlhmhnhohphqhrhsh2dthuh3d4dvh5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dwhxhyhzhAhBhChDhEh;d=dFhGhHh?d@dIhJh[d]d^d_d`d{d|d}d~dKhLhMhNhaebecedeOhPhQhRhShThUhVhWhXhYh

90 return results.scalars() 2eefegej heiek l p r s t u v w x y z A B C D E kelemeneoepeqereseF G teueveH I wexeJ K L M N O P Q R yezeAeBeS T U V CeDeEeFeGeHeIeJeKeLeMeNeOePeW QeReX Y 2 4 5 6 7 8 9 ! # $ % ' ( ) * TeUeVeWeXeYeZe0e1e+ , 2e3e4e- . 5e6e/ : ; = ? @ [ ] ^ 7e8e9e!e_ ` { | #e$e%e'e(e)e*e+e,e-e.e/e:e;e} =e?e~ abebgbhbibjbkblbmbnbobpbqbrbsbtb[e]e^e_e`e{e|e}e~eubvbafbfcfwbxbdfefybzbAbBbCbDbEbFbGbffgfhfifHbIbJbKbjfkflfmfnfofpfqfrfsftfufvfLbwfxfMbNbRbTbUbVbWbXbYbZb0b1b2b3b4b5b6bzfAfBfCfDfEfFfGfHf7b8bIfJfKf9b!bLfMf#b$b%b'b(b)b*b+b,bNfOfPfQf-b.b/b:bRfSfTfUfVfWfXfYfZf0f1f2f3f4f;b5f6f=b?b^b`b{b|b}b~bacbcccdcecfcgchcic8f9f!f#f$f%f'f(f)fjckc*f+f,flcmc-f.fncocpcqcrcsctcucvc/f:f;f=fwcxcyczc?f@f[f]f^f_f`f{f|f}f~fagbgcgAcdgegBcCcGcIcJcKcLcMcNcOcPcQcRcScTcUcVcgghgigjgkglgmgngogWcXcpgqgrgYcZcsgtg0c1c2c3c4c5c6c7c8cugvgwgxg9c!c#c$cygzgAgBgCgDgEgFgGgHgIgJgKgLg%cMgNg'c(c,c.c/c:c;c=c?c@c[c]c^c_c`c{c|cPgQgRgSgTgUgVgWgXg}c~cYgZg0gadbd1g2gcdddedfdgdhdidjdkd3g4g5g6gldmdndod7g8g9g!g#g$g%g'g(g)g*g+g,g-gpd.g/gqdrdvdxdydzdAdBdCdDdEdFdGdHdIdJdKd;g=g?g@g[g]g^g_g`gLdMd{g|g}gNdOd~gahPdQdRdSdTdUdVdWdXdbhchdhehYdZd0d1dfhghhhihjhkhlhmhnhohphqhrhsh2dthuh3d4d8d!d#d$d%d'd(d)d*d+d,d-d.d/d:dwhxhyhzhAhBhChDhEh;d=dFhGhHh?d@dIhJh[d]d^d_d`d{d|d}d~dKhLhMhNhaebecedeOhPhQhRhShThUhVhWhXhYh

91 return results # type: ignore 2jem n o q H I SeZ 0 1 3 - . @ebbcbdbfbwbxbyfObPbQbSb9b!b7f@b[b]b_blcmcfgDcEcFcHcYcZcOg)c*c+c-cadbd:gsdtdudwdNdOdvh5d6d7d9d?d@d

92 

93 @deprecated( 1abgcdhefi

94 """ 

95 🚨 You probably want to use `session.exec()` instead of `session.execute()`. 

96 

97 This is the original SQLAlchemy `session.execute()` method that returns objects 

98 of type `Row`, and that you have to call `scalars()` to get the model objects. 

99 

100 For example: 

101 

102 ```Python 

103 heroes = session.execute(select(Hero)).scalars().all() 

104 ``` 

105 

106 instead you could use `exec()`: 

107 

108 ```Python 

109 heroes = session.exec(select(Hero)).all() 

110 ``` 

111 """, 

112 category=None, 

113 ) 

114 def execute( 1abgcdhefi

115 self, 

116 statement: _Executable, 

117 params: Optional[_CoreAnyExecuteParams] = None, 

118 *, 

119 execution_options: OrmExecuteOptionsParameter = util.EMPTY_DICT, 

120 bind_arguments: Optional[dict[str, Any]] = None, 

121 _parent_execute_state: Optional[Any] = None, 

122 _add_event: Optional[Any] = None, 

123 ) -> Result[Any]: 

124 """ 

125 🚨 You probably want to use `session.exec()` instead of `session.execute()`. 

126 

127 This is the original SQLAlchemy `session.execute()` method that returns objects 

128 of type `Row`, and that you have to call `scalars()` to get the model objects. 

129 

130 For example: 

131 

132 ```Python 

133 heroes = session.execute(select(Hero)).scalars().all() 

134 ``` 

135 

136 instead you could use `exec()`: 

137 

138 ```Python 

139 heroes = session.exec(select(Hero)).all() 

140 ``` 

141 """ 

142 return super().execute( 28h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{hj |h}hk l ~hZhaibicidieim n o p q fir s gihiiijikilit u v w x y z A B C D E miF G nioiJ K piqiL M N O P Q R S T U V risitiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiW RiSiX Y Ti0hUiViWiXiYiZ 0 1 2 3 Zi4 5 0i1i2i3i4i5i6 7 8 9 ! # $ % ' ( ) * 6i+ , 7i8i/ : 9i!i; = ? @ [ ] ^ _ ` { | #i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~i} ajbj~ abcj1hdjejfjgjhjbbcbdbebfbijgbhbjjkjljmjnjojibjbkblbmbnbobpbqbrbsbtbpjubvbqjrjybzbsjtjAbBbCbDbEbFbGbHbIbJbKbujvjwjxjyjzjAjBjCjDjEjFjGjLbHjIjMbNbJj2hKjLjMjNjOjObPbQbRbSbPjTbUbQjRjSjTjUjVjVbWbXbYbZb0b1b2b3b4b5b6bWj7b8bXjYj#b$bZj0j%b'b(b)b*b+b,b-b.b/b:b1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j;b@j[j=b?b]j3h^j_j`j{j|j@b[b]b^b_b}j`b{b~jakbkckdkek|b}b~bacbcccdcecfcgchcicfkjckcgkhkncocikjkpcqcrcsctcucvcwcxcyczckklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkAcKkLkBcCcMk4hNkOkPkQkRkDcEcFcGcHcSkIcJcTkUkVkWkXkYkKcLcMcNcOcPcQcRcScTcUcVcZkWcXc0k1k0c1c2k3k2c3c4c5c6c7c8c9c!c#c$c4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k%c^k_k'c(c`k5h{k|k}k~kal)c*c+c,c-cbl.c/ccldlelflglhl:c;c=c?c@c[c]c^c_c`c{c|cil}c~cjlklcdddllmledfdgdhdidjdkdldmdndodnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlpdNlOlqdrdPl6hQlRlSlTlUlsdtdudvdwdVlxdydWlXlYlZl0l1lzdAdBdCdDdEdFdGdHdIdJdKd2lLdMd3l4lPdQd5l6lRdSdTdUdVdWdXdYdZd0d1d7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l2d{l|l3d4d}l7h~lambmcmdm5d6d7d8d9dem!d#dfmgmhmimjmkm$d%d'd(d)d*d+d,d-d.d/d:dlm;d=dmmnm[d]dompm^d_d`d{d|d}d~daebecede

143 statement, 

144 params=params, 

145 execution_options=execution_options, 

146 bind_arguments=bind_arguments, 

147 _parent_execute_state=_parent_execute_state, 

148 _add_event=_add_event, 

149 ) 

150 

151 @deprecated( 1abgcdhefi

152 """ 

153 🚨 You probably want to use `session.exec()` instead of `session.query()`. 

154 

155 `session.exec()` is SQLModel's own short version with increased type 

156 annotations. 

157 

158 Or otherwise you might want to use `session.execute()` instead of 

159 `session.query()`. 

160 """ 

161 ) 

162 def query( # type: ignore 1abgcdhefi

163 self, *entities: _ColumnsClauseArgument[Any], **kwargs: Any 

164 ) -> _Query[Any]: 

165 """ 

166 🚨 You probably want to use `session.exec()` instead of `session.query()`. 

167 

168 `session.exec()` is SQLModel's own short version with increased type 

169 annotations. 

170 

171 Or otherwise you might want to use `session.execute()` instead of 

172 `session.query()`. 

173 """ 

174 return super().query(*entities, **kwargs) 2Zh0h1h2h3h4h5h6h7h