sqlspec 0.9.0__py3-none-any.whl → 0.9.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of sqlspec might be problematic. Click here for more details.
- sqlspec/adapters/adbc/driver.py +135 -3
- sqlspec/adapters/aiosqlite/driver.py +136 -3
- sqlspec/adapters/asyncmy/driver.py +136 -3
- sqlspec/adapters/asyncpg/driver.py +136 -2
- sqlspec/adapters/duckdb/driver.py +141 -11
- sqlspec/adapters/oracledb/driver.py +270 -4
- sqlspec/adapters/psqlpy/config.py +6 -14
- sqlspec/adapters/psqlpy/driver.py +149 -3
- sqlspec/adapters/psycopg/driver.py +306 -58
- sqlspec/adapters/sqlite/driver.py +136 -34
- sqlspec/base.py +413 -9
- sqlspec/extensions/litestar/plugin.py +2 -0
- {sqlspec-0.9.0.dist-info → sqlspec-0.9.1.dist-info}/METADATA +141 -2
- {sqlspec-0.9.0.dist-info → sqlspec-0.9.1.dist-info}/RECORD +17 -17
- {sqlspec-0.9.0.dist-info → sqlspec-0.9.1.dist-info}/WHEEL +0 -0
- {sqlspec-0.9.0.dist-info → sqlspec-0.9.1.dist-info}/licenses/LICENSE +0 -0
- {sqlspec-0.9.0.dist-info → sqlspec-0.9.1.dist-info}/licenses/NOTICE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import re
|
|
3
|
-
from typing import TYPE_CHECKING, Any, Optional, Union, cast
|
|
3
|
+
from typing import TYPE_CHECKING, Any, Optional, Union, cast, overload
|
|
4
4
|
|
|
5
5
|
from asyncpg import Connection
|
|
6
6
|
from typing_extensions import TypeAlias
|
|
@@ -10,6 +10,8 @@ from sqlspec.exceptions import SQLParsingError
|
|
|
10
10
|
from sqlspec.statement import PARAM_REGEX, SQLStatement
|
|
11
11
|
|
|
12
12
|
if TYPE_CHECKING:
|
|
13
|
+
from collections.abc import Sequence
|
|
14
|
+
|
|
13
15
|
from asyncpg.connection import Connection
|
|
14
16
|
from asyncpg.pool import PoolConnectionProxy
|
|
15
17
|
|
|
@@ -196,6 +198,28 @@ class AsyncpgDriver(AsyncDriverAdapterProtocol["AsyncpgConnection"]):
|
|
|
196
198
|
# No parameters provided and none found in SQL, return original SQL from SQLStatement and empty tuple
|
|
197
199
|
return sql, () # asyncpg expects a sequence, even if empty
|
|
198
200
|
|
|
201
|
+
@overload
|
|
202
|
+
async def select(
|
|
203
|
+
self,
|
|
204
|
+
sql: str,
|
|
205
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
206
|
+
/,
|
|
207
|
+
*,
|
|
208
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
209
|
+
schema_type: None = None,
|
|
210
|
+
**kwargs: Any,
|
|
211
|
+
) -> "Sequence[dict[str, Any]]": ...
|
|
212
|
+
@overload
|
|
213
|
+
async def select(
|
|
214
|
+
self,
|
|
215
|
+
sql: str,
|
|
216
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
217
|
+
/,
|
|
218
|
+
*,
|
|
219
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
220
|
+
schema_type: "type[ModelDTOT]",
|
|
221
|
+
**kwargs: Any,
|
|
222
|
+
) -> "Sequence[ModelDTOT]": ...
|
|
199
223
|
async def select(
|
|
200
224
|
self,
|
|
201
225
|
sql: str,
|
|
@@ -205,7 +229,7 @@ class AsyncpgDriver(AsyncDriverAdapterProtocol["AsyncpgConnection"]):
|
|
|
205
229
|
connection: Optional["AsyncpgConnection"] = None,
|
|
206
230
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
207
231
|
**kwargs: Any,
|
|
208
|
-
) -> "
|
|
232
|
+
) -> "Sequence[Union[ModelDTOT, dict[str, Any]]]":
|
|
209
233
|
"""Fetch data from the database.
|
|
210
234
|
|
|
211
235
|
Args:
|
|
@@ -229,6 +253,28 @@ class AsyncpgDriver(AsyncDriverAdapterProtocol["AsyncpgConnection"]):
|
|
|
229
253
|
return [dict(row.items()) for row in results] # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
|
|
230
254
|
return [cast("ModelDTOT", schema_type(**dict(row.items()))) for row in results] # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
|
|
231
255
|
|
|
256
|
+
@overload
|
|
257
|
+
async def select_one(
|
|
258
|
+
self,
|
|
259
|
+
sql: str,
|
|
260
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
261
|
+
/,
|
|
262
|
+
*,
|
|
263
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
264
|
+
schema_type: None = None,
|
|
265
|
+
**kwargs: Any,
|
|
266
|
+
) -> "dict[str, Any]": ...
|
|
267
|
+
@overload
|
|
268
|
+
async def select_one(
|
|
269
|
+
self,
|
|
270
|
+
sql: str,
|
|
271
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
272
|
+
/,
|
|
273
|
+
*,
|
|
274
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
275
|
+
schema_type: "type[ModelDTOT]",
|
|
276
|
+
**kwargs: Any,
|
|
277
|
+
) -> "ModelDTOT": ...
|
|
232
278
|
async def select_one(
|
|
233
279
|
self,
|
|
234
280
|
sql: str,
|
|
@@ -262,6 +308,28 @@ class AsyncpgDriver(AsyncDriverAdapterProtocol["AsyncpgConnection"]):
|
|
|
262
308
|
return dict(result.items()) # type: ignore[attr-defined]
|
|
263
309
|
return cast("ModelDTOT", schema_type(**dict(result.items()))) # type: ignore[attr-defined]
|
|
264
310
|
|
|
311
|
+
@overload
|
|
312
|
+
async def select_one_or_none(
|
|
313
|
+
self,
|
|
314
|
+
sql: str,
|
|
315
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
316
|
+
/,
|
|
317
|
+
*,
|
|
318
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
319
|
+
schema_type: None = None,
|
|
320
|
+
**kwargs: Any,
|
|
321
|
+
) -> "Optional[dict[str, Any]]": ...
|
|
322
|
+
@overload
|
|
323
|
+
async def select_one_or_none(
|
|
324
|
+
self,
|
|
325
|
+
sql: str,
|
|
326
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
327
|
+
/,
|
|
328
|
+
*,
|
|
329
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
330
|
+
schema_type: "type[ModelDTOT]",
|
|
331
|
+
**kwargs: Any,
|
|
332
|
+
) -> "Optional[ModelDTOT]": ...
|
|
265
333
|
async def select_one_or_none(
|
|
266
334
|
self,
|
|
267
335
|
sql: str,
|
|
@@ -295,6 +363,28 @@ class AsyncpgDriver(AsyncDriverAdapterProtocol["AsyncpgConnection"]):
|
|
|
295
363
|
return dict(result.items())
|
|
296
364
|
return cast("ModelDTOT", schema_type(**dict(result.items())))
|
|
297
365
|
|
|
366
|
+
@overload
|
|
367
|
+
async def select_value(
|
|
368
|
+
self,
|
|
369
|
+
sql: str,
|
|
370
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
371
|
+
/,
|
|
372
|
+
*,
|
|
373
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
374
|
+
schema_type: None = None,
|
|
375
|
+
**kwargs: Any,
|
|
376
|
+
) -> "Any": ...
|
|
377
|
+
@overload
|
|
378
|
+
async def select_value(
|
|
379
|
+
self,
|
|
380
|
+
sql: str,
|
|
381
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
382
|
+
/,
|
|
383
|
+
*,
|
|
384
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
385
|
+
schema_type: "type[T]",
|
|
386
|
+
**kwargs: Any,
|
|
387
|
+
) -> "T": ...
|
|
298
388
|
async def select_value(
|
|
299
389
|
self,
|
|
300
390
|
sql: str,
|
|
@@ -326,6 +416,28 @@ class AsyncpgDriver(AsyncDriverAdapterProtocol["AsyncpgConnection"]):
|
|
|
326
416
|
return result
|
|
327
417
|
return schema_type(result) # type: ignore[call-arg]
|
|
328
418
|
|
|
419
|
+
@overload
|
|
420
|
+
async def select_value_or_none(
|
|
421
|
+
self,
|
|
422
|
+
sql: str,
|
|
423
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
424
|
+
/,
|
|
425
|
+
*,
|
|
426
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
427
|
+
schema_type: None = None,
|
|
428
|
+
**kwargs: Any,
|
|
429
|
+
) -> "Optional[Any]": ...
|
|
430
|
+
@overload
|
|
431
|
+
async def select_value_or_none(
|
|
432
|
+
self,
|
|
433
|
+
sql: str,
|
|
434
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
435
|
+
/,
|
|
436
|
+
*,
|
|
437
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
438
|
+
schema_type: "type[T]",
|
|
439
|
+
**kwargs: Any,
|
|
440
|
+
) -> "Optional[T]": ...
|
|
329
441
|
async def select_value_or_none(
|
|
330
442
|
self,
|
|
331
443
|
sql: str,
|
|
@@ -381,6 +493,28 @@ class AsyncpgDriver(AsyncDriverAdapterProtocol["AsyncpgConnection"]):
|
|
|
381
493
|
except (ValueError, IndexError, AttributeError):
|
|
382
494
|
return -1 # Fallback if we can't parse the status
|
|
383
495
|
|
|
496
|
+
@overload
|
|
497
|
+
async def insert_update_delete_returning(
|
|
498
|
+
self,
|
|
499
|
+
sql: str,
|
|
500
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
501
|
+
/,
|
|
502
|
+
*,
|
|
503
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
504
|
+
schema_type: None = None,
|
|
505
|
+
**kwargs: Any,
|
|
506
|
+
) -> "dict[str, Any]": ...
|
|
507
|
+
@overload
|
|
508
|
+
async def insert_update_delete_returning(
|
|
509
|
+
self,
|
|
510
|
+
sql: str,
|
|
511
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
512
|
+
/,
|
|
513
|
+
*,
|
|
514
|
+
connection: "Optional[AsyncpgConnection]" = None,
|
|
515
|
+
schema_type: "type[ModelDTOT]",
|
|
516
|
+
**kwargs: Any,
|
|
517
|
+
) -> "ModelDTOT": ...
|
|
384
518
|
async def insert_update_delete_returning(
|
|
385
519
|
self,
|
|
386
520
|
sql: str,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
from contextlib import contextmanager
|
|
2
|
-
from typing import TYPE_CHECKING, Any, Optional, Union, cast
|
|
2
|
+
from typing import TYPE_CHECKING, Any, Optional, Union, cast, overload
|
|
3
3
|
|
|
4
4
|
from sqlspec.base import SyncArrowBulkOperationsMixin, SyncDriverAdapterProtocol, T
|
|
5
5
|
|
|
6
6
|
if TYPE_CHECKING:
|
|
7
|
-
from collections.abc import Generator
|
|
7
|
+
from collections.abc import Generator, Sequence
|
|
8
8
|
|
|
9
9
|
from duckdb import DuckDBPyConnection
|
|
10
10
|
|
|
@@ -42,17 +42,38 @@ class DuckDBDriver(SyncArrowBulkOperationsMixin["DuckDBPyConnection"], SyncDrive
|
|
|
42
42
|
yield connection
|
|
43
43
|
|
|
44
44
|
# --- Public API Methods --- #
|
|
45
|
-
|
|
45
|
+
@overload
|
|
46
46
|
def select(
|
|
47
47
|
self,
|
|
48
48
|
sql: str,
|
|
49
|
-
parameters: Optional[
|
|
49
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
50
50
|
/,
|
|
51
51
|
*,
|
|
52
|
-
connection: Optional[
|
|
52
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
53
|
+
schema_type: None = None,
|
|
54
|
+
**kwargs: Any,
|
|
55
|
+
) -> "Sequence[dict[str, Any]]": ...
|
|
56
|
+
@overload
|
|
57
|
+
def select(
|
|
58
|
+
self,
|
|
59
|
+
sql: str,
|
|
60
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
61
|
+
/,
|
|
62
|
+
*,
|
|
63
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
64
|
+
schema_type: "type[ModelDTOT]",
|
|
65
|
+
**kwargs: Any,
|
|
66
|
+
) -> "Sequence[ModelDTOT]": ...
|
|
67
|
+
def select(
|
|
68
|
+
self,
|
|
69
|
+
sql: str,
|
|
70
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
71
|
+
/,
|
|
72
|
+
*,
|
|
73
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
53
74
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
54
75
|
**kwargs: Any,
|
|
55
|
-
) -> "
|
|
76
|
+
) -> "Sequence[Union[ModelDTOT, dict[str, Any]]]":
|
|
56
77
|
connection = self._connection(connection)
|
|
57
78
|
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
58
79
|
with self._with_cursor(connection) as cursor:
|
|
@@ -67,6 +88,28 @@ class DuckDBDriver(SyncArrowBulkOperationsMixin["DuckDBPyConnection"], SyncDrive
|
|
|
67
88
|
return [cast("ModelDTOT", schema_type(**dict(zip(column_names, row)))) for row in results] # pyright: ignore[reportUnknownArgumentType]
|
|
68
89
|
return [dict(zip(column_names, row)) for row in results] # pyright: ignore[reportUnknownArgumentType]
|
|
69
90
|
|
|
91
|
+
@overload
|
|
92
|
+
def select_one(
|
|
93
|
+
self,
|
|
94
|
+
sql: str,
|
|
95
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
96
|
+
/,
|
|
97
|
+
*,
|
|
98
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
99
|
+
schema_type: None = None,
|
|
100
|
+
**kwargs: Any,
|
|
101
|
+
) -> "dict[str, Any]": ...
|
|
102
|
+
@overload
|
|
103
|
+
def select_one(
|
|
104
|
+
self,
|
|
105
|
+
sql: str,
|
|
106
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
107
|
+
/,
|
|
108
|
+
*,
|
|
109
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
110
|
+
schema_type: "type[ModelDTOT]",
|
|
111
|
+
**kwargs: Any,
|
|
112
|
+
) -> "ModelDTOT": ...
|
|
70
113
|
def select_one(
|
|
71
114
|
self,
|
|
72
115
|
sql: str,
|
|
@@ -90,6 +133,28 @@ class DuckDBDriver(SyncArrowBulkOperationsMixin["DuckDBPyConnection"], SyncDrive
|
|
|
90
133
|
# Always return dictionaries
|
|
91
134
|
return dict(zip(column_names, result)) # pyright: ignore[reportUnknownArgumentType,reportUnknownVariableType]
|
|
92
135
|
|
|
136
|
+
@overload
|
|
137
|
+
def select_one_or_none(
|
|
138
|
+
self,
|
|
139
|
+
sql: str,
|
|
140
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
141
|
+
/,
|
|
142
|
+
*,
|
|
143
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
144
|
+
schema_type: None = None,
|
|
145
|
+
**kwargs: Any,
|
|
146
|
+
) -> "Optional[dict[str, Any]]": ...
|
|
147
|
+
@overload
|
|
148
|
+
def select_one_or_none(
|
|
149
|
+
self,
|
|
150
|
+
sql: str,
|
|
151
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
152
|
+
/,
|
|
153
|
+
*,
|
|
154
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
155
|
+
schema_type: "type[ModelDTOT]",
|
|
156
|
+
**kwargs: Any,
|
|
157
|
+
) -> "Optional[ModelDTOT]": ...
|
|
93
158
|
def select_one_or_none(
|
|
94
159
|
self,
|
|
95
160
|
sql: str,
|
|
@@ -113,6 +178,28 @@ class DuckDBDriver(SyncArrowBulkOperationsMixin["DuckDBPyConnection"], SyncDrive
|
|
|
113
178
|
return cast("ModelDTOT", schema_type(**dict(zip(column_names, result)))) # pyright: ignore[reportUnknownArgumentType]
|
|
114
179
|
return dict(zip(column_names, result)) # pyright: ignore[reportUnknownArgumentType,reportUnknownVariableType]
|
|
115
180
|
|
|
181
|
+
@overload
|
|
182
|
+
def select_value(
|
|
183
|
+
self,
|
|
184
|
+
sql: str,
|
|
185
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
186
|
+
/,
|
|
187
|
+
*,
|
|
188
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
189
|
+
schema_type: None = None,
|
|
190
|
+
**kwargs: Any,
|
|
191
|
+
) -> "Any": ...
|
|
192
|
+
@overload
|
|
193
|
+
def select_value(
|
|
194
|
+
self,
|
|
195
|
+
sql: str,
|
|
196
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
197
|
+
/,
|
|
198
|
+
*,
|
|
199
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
200
|
+
schema_type: "type[T]",
|
|
201
|
+
**kwargs: Any,
|
|
202
|
+
) -> "T": ...
|
|
116
203
|
def select_value(
|
|
117
204
|
self,
|
|
118
205
|
sql: str,
|
|
@@ -133,6 +220,28 @@ class DuckDBDriver(SyncArrowBulkOperationsMixin["DuckDBPyConnection"], SyncDrive
|
|
|
133
220
|
return result[0] # pyright: ignore
|
|
134
221
|
return schema_type(result[0]) # type: ignore[call-arg]
|
|
135
222
|
|
|
223
|
+
@overload
|
|
224
|
+
def select_value_or_none(
|
|
225
|
+
self,
|
|
226
|
+
sql: str,
|
|
227
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
228
|
+
/,
|
|
229
|
+
*,
|
|
230
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
231
|
+
schema_type: None = None,
|
|
232
|
+
**kwargs: Any,
|
|
233
|
+
) -> "Optional[Any]": ...
|
|
234
|
+
@overload
|
|
235
|
+
def select_value_or_none(
|
|
236
|
+
self,
|
|
237
|
+
sql: str,
|
|
238
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
239
|
+
/,
|
|
240
|
+
*,
|
|
241
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
242
|
+
schema_type: "type[T]",
|
|
243
|
+
**kwargs: Any,
|
|
244
|
+
) -> "Optional[T]": ...
|
|
136
245
|
def select_value_or_none(
|
|
137
246
|
self,
|
|
138
247
|
sql: str,
|
|
@@ -169,23 +278,44 @@ class DuckDBDriver(SyncArrowBulkOperationsMixin["DuckDBPyConnection"], SyncDrive
|
|
|
169
278
|
cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
170
279
|
return getattr(cursor, "rowcount", -1) # pyright: ignore[reportUnknownMemberType]
|
|
171
280
|
|
|
281
|
+
@overload
|
|
172
282
|
def insert_update_delete_returning(
|
|
173
283
|
self,
|
|
174
284
|
sql: str,
|
|
175
|
-
parameters: Optional[
|
|
285
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
176
286
|
/,
|
|
177
287
|
*,
|
|
178
|
-
connection: Optional[
|
|
288
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
289
|
+
schema_type: None = None,
|
|
290
|
+
**kwargs: Any,
|
|
291
|
+
) -> "dict[str, Any]": ...
|
|
292
|
+
@overload
|
|
293
|
+
def insert_update_delete_returning(
|
|
294
|
+
self,
|
|
295
|
+
sql: str,
|
|
296
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
297
|
+
/,
|
|
298
|
+
*,
|
|
299
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
300
|
+
schema_type: "type[ModelDTOT]",
|
|
301
|
+
**kwargs: Any,
|
|
302
|
+
) -> "ModelDTOT": ...
|
|
303
|
+
def insert_update_delete_returning(
|
|
304
|
+
self,
|
|
305
|
+
sql: str,
|
|
306
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
307
|
+
/,
|
|
308
|
+
*,
|
|
309
|
+
connection: "Optional[DuckDBPyConnection]" = None,
|
|
179
310
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
180
311
|
**kwargs: Any,
|
|
181
|
-
) -> "
|
|
312
|
+
) -> "Union[ModelDTOT, dict[str, Any]]":
|
|
182
313
|
connection = self._connection(connection)
|
|
183
314
|
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
184
315
|
with self._with_cursor(connection) as cursor:
|
|
185
316
|
cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
186
317
|
result = cursor.fetchall() # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
|
|
187
|
-
|
|
188
|
-
return None # pyright: ignore[reportUnknownArgumentType]
|
|
318
|
+
result = self.check_not_found(result) # pyright: ignore
|
|
189
319
|
column_names = [col[0] for col in cursor.description or []] # pyright: ignore[reportUnknownMemberType,reportUnknownVariableType]
|
|
190
320
|
if schema_type is not None:
|
|
191
321
|
return cast("ModelDTOT", schema_type(**dict(zip(column_names, result[0])))) # pyright: ignore[reportUnknownArgumentType]
|