SQLAlchemy 2.0.47__cp313-cp313t-win32.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.
Files changed (274) hide show
  1. sqlalchemy/__init__.py +283 -0
  2. sqlalchemy/connectors/__init__.py +18 -0
  3. sqlalchemy/connectors/aioodbc.py +184 -0
  4. sqlalchemy/connectors/asyncio.py +429 -0
  5. sqlalchemy/connectors/pyodbc.py +250 -0
  6. sqlalchemy/cyextension/__init__.py +6 -0
  7. sqlalchemy/cyextension/collections.cp313t-win32.pyd +0 -0
  8. sqlalchemy/cyextension/collections.pyx +409 -0
  9. sqlalchemy/cyextension/immutabledict.cp313t-win32.pyd +0 -0
  10. sqlalchemy/cyextension/immutabledict.pxd +8 -0
  11. sqlalchemy/cyextension/immutabledict.pyx +133 -0
  12. sqlalchemy/cyextension/processors.cp313t-win32.pyd +0 -0
  13. sqlalchemy/cyextension/processors.pyx +68 -0
  14. sqlalchemy/cyextension/resultproxy.cp313t-win32.pyd +0 -0
  15. sqlalchemy/cyextension/resultproxy.pyx +102 -0
  16. sqlalchemy/cyextension/util.cp313t-win32.pyd +0 -0
  17. sqlalchemy/cyextension/util.pyx +90 -0
  18. sqlalchemy/dialects/__init__.py +62 -0
  19. sqlalchemy/dialects/_typing.py +30 -0
  20. sqlalchemy/dialects/mssql/__init__.py +88 -0
  21. sqlalchemy/dialects/mssql/aioodbc.py +63 -0
  22. sqlalchemy/dialects/mssql/base.py +4093 -0
  23. sqlalchemy/dialects/mssql/information_schema.py +285 -0
  24. sqlalchemy/dialects/mssql/json.py +129 -0
  25. sqlalchemy/dialects/mssql/provision.py +185 -0
  26. sqlalchemy/dialects/mssql/pymssql.py +126 -0
  27. sqlalchemy/dialects/mssql/pyodbc.py +760 -0
  28. sqlalchemy/dialects/mysql/__init__.py +104 -0
  29. sqlalchemy/dialects/mysql/aiomysql.py +250 -0
  30. sqlalchemy/dialects/mysql/asyncmy.py +231 -0
  31. sqlalchemy/dialects/mysql/base.py +3949 -0
  32. sqlalchemy/dialects/mysql/cymysql.py +106 -0
  33. sqlalchemy/dialects/mysql/dml.py +225 -0
  34. sqlalchemy/dialects/mysql/enumerated.py +282 -0
  35. sqlalchemy/dialects/mysql/expression.py +146 -0
  36. sqlalchemy/dialects/mysql/json.py +91 -0
  37. sqlalchemy/dialects/mysql/mariadb.py +72 -0
  38. sqlalchemy/dialects/mysql/mariadbconnector.py +322 -0
  39. sqlalchemy/dialects/mysql/mysqlconnector.py +302 -0
  40. sqlalchemy/dialects/mysql/mysqldb.py +314 -0
  41. sqlalchemy/dialects/mysql/provision.py +153 -0
  42. sqlalchemy/dialects/mysql/pymysql.py +158 -0
  43. sqlalchemy/dialects/mysql/pyodbc.py +157 -0
  44. sqlalchemy/dialects/mysql/reflection.py +727 -0
  45. sqlalchemy/dialects/mysql/reserved_words.py +570 -0
  46. sqlalchemy/dialects/mysql/types.py +835 -0
  47. sqlalchemy/dialects/oracle/__init__.py +81 -0
  48. sqlalchemy/dialects/oracle/base.py +3802 -0
  49. sqlalchemy/dialects/oracle/cx_oracle.py +1555 -0
  50. sqlalchemy/dialects/oracle/dictionary.py +507 -0
  51. sqlalchemy/dialects/oracle/oracledb.py +941 -0
  52. sqlalchemy/dialects/oracle/provision.py +297 -0
  53. sqlalchemy/dialects/oracle/types.py +316 -0
  54. sqlalchemy/dialects/oracle/vector.py +365 -0
  55. sqlalchemy/dialects/postgresql/__init__.py +167 -0
  56. sqlalchemy/dialects/postgresql/_psycopg_common.py +189 -0
  57. sqlalchemy/dialects/postgresql/array.py +519 -0
  58. sqlalchemy/dialects/postgresql/asyncpg.py +1284 -0
  59. sqlalchemy/dialects/postgresql/base.py +5378 -0
  60. sqlalchemy/dialects/postgresql/dml.py +339 -0
  61. sqlalchemy/dialects/postgresql/ext.py +540 -0
  62. sqlalchemy/dialects/postgresql/hstore.py +406 -0
  63. sqlalchemy/dialects/postgresql/json.py +404 -0
  64. sqlalchemy/dialects/postgresql/named_types.py +524 -0
  65. sqlalchemy/dialects/postgresql/operators.py +129 -0
  66. sqlalchemy/dialects/postgresql/pg8000.py +669 -0
  67. sqlalchemy/dialects/postgresql/pg_catalog.py +326 -0
  68. sqlalchemy/dialects/postgresql/provision.py +183 -0
  69. sqlalchemy/dialects/postgresql/psycopg.py +862 -0
  70. sqlalchemy/dialects/postgresql/psycopg2.py +892 -0
  71. sqlalchemy/dialects/postgresql/psycopg2cffi.py +61 -0
  72. sqlalchemy/dialects/postgresql/ranges.py +1031 -0
  73. sqlalchemy/dialects/postgresql/types.py +313 -0
  74. sqlalchemy/dialects/sqlite/__init__.py +57 -0
  75. sqlalchemy/dialects/sqlite/aiosqlite.py +482 -0
  76. sqlalchemy/dialects/sqlite/base.py +3056 -0
  77. sqlalchemy/dialects/sqlite/dml.py +263 -0
  78. sqlalchemy/dialects/sqlite/json.py +92 -0
  79. sqlalchemy/dialects/sqlite/provision.py +229 -0
  80. sqlalchemy/dialects/sqlite/pysqlcipher.py +157 -0
  81. sqlalchemy/dialects/sqlite/pysqlite.py +756 -0
  82. sqlalchemy/dialects/type_migration_guidelines.txt +145 -0
  83. sqlalchemy/engine/__init__.py +62 -0
  84. sqlalchemy/engine/_py_processors.py +136 -0
  85. sqlalchemy/engine/_py_row.py +128 -0
  86. sqlalchemy/engine/_py_util.py +74 -0
  87. sqlalchemy/engine/base.py +3390 -0
  88. sqlalchemy/engine/characteristics.py +155 -0
  89. sqlalchemy/engine/create.py +893 -0
  90. sqlalchemy/engine/cursor.py +2298 -0
  91. sqlalchemy/engine/default.py +2394 -0
  92. sqlalchemy/engine/events.py +965 -0
  93. sqlalchemy/engine/interfaces.py +3471 -0
  94. sqlalchemy/engine/mock.py +134 -0
  95. sqlalchemy/engine/processors.py +61 -0
  96. sqlalchemy/engine/reflection.py +2102 -0
  97. sqlalchemy/engine/result.py +2399 -0
  98. sqlalchemy/engine/row.py +400 -0
  99. sqlalchemy/engine/strategies.py +16 -0
  100. sqlalchemy/engine/url.py +924 -0
  101. sqlalchemy/engine/util.py +167 -0
  102. sqlalchemy/event/__init__.py +26 -0
  103. sqlalchemy/event/api.py +220 -0
  104. sqlalchemy/event/attr.py +676 -0
  105. sqlalchemy/event/base.py +472 -0
  106. sqlalchemy/event/legacy.py +258 -0
  107. sqlalchemy/event/registry.py +390 -0
  108. sqlalchemy/events.py +17 -0
  109. sqlalchemy/exc.py +832 -0
  110. sqlalchemy/ext/__init__.py +11 -0
  111. sqlalchemy/ext/associationproxy.py +2027 -0
  112. sqlalchemy/ext/asyncio/__init__.py +25 -0
  113. sqlalchemy/ext/asyncio/base.py +281 -0
  114. sqlalchemy/ext/asyncio/engine.py +1471 -0
  115. sqlalchemy/ext/asyncio/exc.py +21 -0
  116. sqlalchemy/ext/asyncio/result.py +965 -0
  117. sqlalchemy/ext/asyncio/scoping.py +1599 -0
  118. sqlalchemy/ext/asyncio/session.py +1947 -0
  119. sqlalchemy/ext/automap.py +1701 -0
  120. sqlalchemy/ext/baked.py +570 -0
  121. sqlalchemy/ext/compiler.py +600 -0
  122. sqlalchemy/ext/declarative/__init__.py +65 -0
  123. sqlalchemy/ext/declarative/extensions.py +564 -0
  124. sqlalchemy/ext/horizontal_shard.py +478 -0
  125. sqlalchemy/ext/hybrid.py +1535 -0
  126. sqlalchemy/ext/indexable.py +364 -0
  127. sqlalchemy/ext/instrumentation.py +450 -0
  128. sqlalchemy/ext/mutable.py +1085 -0
  129. sqlalchemy/ext/mypy/__init__.py +6 -0
  130. sqlalchemy/ext/mypy/apply.py +324 -0
  131. sqlalchemy/ext/mypy/decl_class.py +515 -0
  132. sqlalchemy/ext/mypy/infer.py +590 -0
  133. sqlalchemy/ext/mypy/names.py +335 -0
  134. sqlalchemy/ext/mypy/plugin.py +303 -0
  135. sqlalchemy/ext/mypy/util.py +357 -0
  136. sqlalchemy/ext/orderinglist.py +439 -0
  137. sqlalchemy/ext/serializer.py +185 -0
  138. sqlalchemy/future/__init__.py +16 -0
  139. sqlalchemy/future/engine.py +15 -0
  140. sqlalchemy/inspection.py +174 -0
  141. sqlalchemy/log.py +288 -0
  142. sqlalchemy/orm/__init__.py +171 -0
  143. sqlalchemy/orm/_orm_constructors.py +2661 -0
  144. sqlalchemy/orm/_typing.py +179 -0
  145. sqlalchemy/orm/attributes.py +2845 -0
  146. sqlalchemy/orm/base.py +971 -0
  147. sqlalchemy/orm/bulk_persistence.py +2135 -0
  148. sqlalchemy/orm/clsregistry.py +571 -0
  149. sqlalchemy/orm/collections.py +1627 -0
  150. sqlalchemy/orm/context.py +3334 -0
  151. sqlalchemy/orm/decl_api.py +2004 -0
  152. sqlalchemy/orm/decl_base.py +2192 -0
  153. sqlalchemy/orm/dependency.py +1302 -0
  154. sqlalchemy/orm/descriptor_props.py +1092 -0
  155. sqlalchemy/orm/dynamic.py +300 -0
  156. sqlalchemy/orm/evaluator.py +379 -0
  157. sqlalchemy/orm/events.py +3252 -0
  158. sqlalchemy/orm/exc.py +237 -0
  159. sqlalchemy/orm/identity.py +302 -0
  160. sqlalchemy/orm/instrumentation.py +754 -0
  161. sqlalchemy/orm/interfaces.py +1496 -0
  162. sqlalchemy/orm/loading.py +1686 -0
  163. sqlalchemy/orm/mapped_collection.py +557 -0
  164. sqlalchemy/orm/mapper.py +4444 -0
  165. sqlalchemy/orm/path_registry.py +809 -0
  166. sqlalchemy/orm/persistence.py +1788 -0
  167. sqlalchemy/orm/properties.py +935 -0
  168. sqlalchemy/orm/query.py +3459 -0
  169. sqlalchemy/orm/relationships.py +3508 -0
  170. sqlalchemy/orm/scoping.py +2148 -0
  171. sqlalchemy/orm/session.py +5280 -0
  172. sqlalchemy/orm/state.py +1168 -0
  173. sqlalchemy/orm/state_changes.py +196 -0
  174. sqlalchemy/orm/strategies.py +3470 -0
  175. sqlalchemy/orm/strategy_options.py +2568 -0
  176. sqlalchemy/orm/sync.py +164 -0
  177. sqlalchemy/orm/unitofwork.py +796 -0
  178. sqlalchemy/orm/util.py +2403 -0
  179. sqlalchemy/orm/writeonly.py +674 -0
  180. sqlalchemy/pool/__init__.py +44 -0
  181. sqlalchemy/pool/base.py +1524 -0
  182. sqlalchemy/pool/events.py +375 -0
  183. sqlalchemy/pool/impl.py +588 -0
  184. sqlalchemy/py.typed +0 -0
  185. sqlalchemy/schema.py +69 -0
  186. sqlalchemy/sql/__init__.py +145 -0
  187. sqlalchemy/sql/_dml_constructors.py +132 -0
  188. sqlalchemy/sql/_elements_constructors.py +1872 -0
  189. sqlalchemy/sql/_orm_types.py +20 -0
  190. sqlalchemy/sql/_py_util.py +75 -0
  191. sqlalchemy/sql/_selectable_constructors.py +763 -0
  192. sqlalchemy/sql/_typing.py +482 -0
  193. sqlalchemy/sql/annotation.py +587 -0
  194. sqlalchemy/sql/base.py +2293 -0
  195. sqlalchemy/sql/cache_key.py +1057 -0
  196. sqlalchemy/sql/coercions.py +1404 -0
  197. sqlalchemy/sql/compiler.py +8081 -0
  198. sqlalchemy/sql/crud.py +1752 -0
  199. sqlalchemy/sql/ddl.py +1444 -0
  200. sqlalchemy/sql/default_comparator.py +551 -0
  201. sqlalchemy/sql/dml.py +1850 -0
  202. sqlalchemy/sql/elements.py +5589 -0
  203. sqlalchemy/sql/events.py +458 -0
  204. sqlalchemy/sql/expression.py +159 -0
  205. sqlalchemy/sql/functions.py +2158 -0
  206. sqlalchemy/sql/lambdas.py +1442 -0
  207. sqlalchemy/sql/naming.py +209 -0
  208. sqlalchemy/sql/operators.py +2623 -0
  209. sqlalchemy/sql/roles.py +323 -0
  210. sqlalchemy/sql/schema.py +6222 -0
  211. sqlalchemy/sql/selectable.py +7265 -0
  212. sqlalchemy/sql/sqltypes.py +3930 -0
  213. sqlalchemy/sql/traversals.py +1024 -0
  214. sqlalchemy/sql/type_api.py +2368 -0
  215. sqlalchemy/sql/util.py +1485 -0
  216. sqlalchemy/sql/visitors.py +1164 -0
  217. sqlalchemy/testing/__init__.py +96 -0
  218. sqlalchemy/testing/assertions.py +994 -0
  219. sqlalchemy/testing/assertsql.py +520 -0
  220. sqlalchemy/testing/asyncio.py +135 -0
  221. sqlalchemy/testing/config.py +434 -0
  222. sqlalchemy/testing/engines.py +483 -0
  223. sqlalchemy/testing/entities.py +117 -0
  224. sqlalchemy/testing/exclusions.py +476 -0
  225. sqlalchemy/testing/fixtures/__init__.py +28 -0
  226. sqlalchemy/testing/fixtures/base.py +384 -0
  227. sqlalchemy/testing/fixtures/mypy.py +332 -0
  228. sqlalchemy/testing/fixtures/orm.py +227 -0
  229. sqlalchemy/testing/fixtures/sql.py +482 -0
  230. sqlalchemy/testing/pickleable.py +155 -0
  231. sqlalchemy/testing/plugin/__init__.py +6 -0
  232. sqlalchemy/testing/plugin/bootstrap.py +51 -0
  233. sqlalchemy/testing/plugin/plugin_base.py +828 -0
  234. sqlalchemy/testing/plugin/pytestplugin.py +892 -0
  235. sqlalchemy/testing/profiling.py +329 -0
  236. sqlalchemy/testing/provision.py +603 -0
  237. sqlalchemy/testing/requirements.py +1945 -0
  238. sqlalchemy/testing/schema.py +198 -0
  239. sqlalchemy/testing/suite/__init__.py +19 -0
  240. sqlalchemy/testing/suite/test_cte.py +237 -0
  241. sqlalchemy/testing/suite/test_ddl.py +389 -0
  242. sqlalchemy/testing/suite/test_deprecations.py +153 -0
  243. sqlalchemy/testing/suite/test_dialect.py +776 -0
  244. sqlalchemy/testing/suite/test_insert.py +630 -0
  245. sqlalchemy/testing/suite/test_reflection.py +3557 -0
  246. sqlalchemy/testing/suite/test_results.py +504 -0
  247. sqlalchemy/testing/suite/test_rowcount.py +258 -0
  248. sqlalchemy/testing/suite/test_select.py +2010 -0
  249. sqlalchemy/testing/suite/test_sequence.py +317 -0
  250. sqlalchemy/testing/suite/test_types.py +2147 -0
  251. sqlalchemy/testing/suite/test_unicode_ddl.py +189 -0
  252. sqlalchemy/testing/suite/test_update_delete.py +139 -0
  253. sqlalchemy/testing/util.py +535 -0
  254. sqlalchemy/testing/warnings.py +52 -0
  255. sqlalchemy/types.py +74 -0
  256. sqlalchemy/util/__init__.py +162 -0
  257. sqlalchemy/util/_collections.py +712 -0
  258. sqlalchemy/util/_concurrency_py3k.py +288 -0
  259. sqlalchemy/util/_has_cy.py +40 -0
  260. sqlalchemy/util/_py_collections.py +541 -0
  261. sqlalchemy/util/compat.py +421 -0
  262. sqlalchemy/util/concurrency.py +110 -0
  263. sqlalchemy/util/deprecations.py +401 -0
  264. sqlalchemy/util/langhelpers.py +2203 -0
  265. sqlalchemy/util/preloaded.py +150 -0
  266. sqlalchemy/util/queue.py +322 -0
  267. sqlalchemy/util/tool_support.py +201 -0
  268. sqlalchemy/util/topological.py +120 -0
  269. sqlalchemy/util/typing.py +734 -0
  270. sqlalchemy-2.0.47.dist-info/METADATA +243 -0
  271. sqlalchemy-2.0.47.dist-info/RECORD +274 -0
  272. sqlalchemy-2.0.47.dist-info/WHEEL +5 -0
  273. sqlalchemy-2.0.47.dist-info/licenses/LICENSE +19 -0
  274. sqlalchemy-2.0.47.dist-info/top_level.txt +1 -0
sqlalchemy/__init__.py ADDED
@@ -0,0 +1,283 @@
1
+ # __init__.py
2
+ # Copyright (C) 2005-2026 the SQLAlchemy authors and contributors
3
+ # <see AUTHORS file>
4
+ #
5
+ # This module is part of SQLAlchemy and is released under
6
+ # the MIT License: https://www.opensource.org/licenses/mit-license.php
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Any
11
+
12
+ from . import util as _util
13
+ from .engine import AdaptedConnection as AdaptedConnection
14
+ from .engine import BaseRow as BaseRow
15
+ from .engine import BindTyping as BindTyping
16
+ from .engine import ChunkedIteratorResult as ChunkedIteratorResult
17
+ from .engine import Compiled as Compiled
18
+ from .engine import Connection as Connection
19
+ from .engine import create_engine as create_engine
20
+ from .engine import create_mock_engine as create_mock_engine
21
+ from .engine import create_pool_from_url as create_pool_from_url
22
+ from .engine import CreateEnginePlugin as CreateEnginePlugin
23
+ from .engine import CursorResult as CursorResult
24
+ from .engine import Dialect as Dialect
25
+ from .engine import Engine as Engine
26
+ from .engine import engine_from_config as engine_from_config
27
+ from .engine import ExceptionContext as ExceptionContext
28
+ from .engine import ExecutionContext as ExecutionContext
29
+ from .engine import FrozenResult as FrozenResult
30
+ from .engine import Inspector as Inspector
31
+ from .engine import IteratorResult as IteratorResult
32
+ from .engine import make_url as make_url
33
+ from .engine import MappingResult as MappingResult
34
+ from .engine import MergedResult as MergedResult
35
+ from .engine import NestedTransaction as NestedTransaction
36
+ from .engine import Result as Result
37
+ from .engine import result_tuple as result_tuple
38
+ from .engine import ResultProxy as ResultProxy
39
+ from .engine import RootTransaction as RootTransaction
40
+ from .engine import Row as Row
41
+ from .engine import RowMapping as RowMapping
42
+ from .engine import ScalarResult as ScalarResult
43
+ from .engine import Transaction as Transaction
44
+ from .engine import TwoPhaseTransaction as TwoPhaseTransaction
45
+ from .engine import TypeCompiler as TypeCompiler
46
+ from .engine import URL as URL
47
+ from .inspection import inspect as inspect
48
+ from .pool import AssertionPool as AssertionPool
49
+ from .pool import AsyncAdaptedQueuePool as AsyncAdaptedQueuePool
50
+ from .pool import (
51
+ FallbackAsyncAdaptedQueuePool as FallbackAsyncAdaptedQueuePool,
52
+ )
53
+ from .pool import NullPool as NullPool
54
+ from .pool import Pool as Pool
55
+ from .pool import PoolProxiedConnection as PoolProxiedConnection
56
+ from .pool import PoolResetState as PoolResetState
57
+ from .pool import QueuePool as QueuePool
58
+ from .pool import SingletonThreadPool as SingletonThreadPool
59
+ from .pool import StaticPool as StaticPool
60
+ from .schema import BaseDDLElement as BaseDDLElement
61
+ from .schema import BLANK_SCHEMA as BLANK_SCHEMA
62
+ from .schema import CheckConstraint as CheckConstraint
63
+ from .schema import Column as Column
64
+ from .schema import ColumnDefault as ColumnDefault
65
+ from .schema import Computed as Computed
66
+ from .schema import Constraint as Constraint
67
+ from .schema import DDL as DDL
68
+ from .schema import DDLElement as DDLElement
69
+ from .schema import DefaultClause as DefaultClause
70
+ from .schema import ExecutableDDLElement as ExecutableDDLElement
71
+ from .schema import FetchedValue as FetchedValue
72
+ from .schema import ForeignKey as ForeignKey
73
+ from .schema import ForeignKeyConstraint as ForeignKeyConstraint
74
+ from .schema import Identity as Identity
75
+ from .schema import Index as Index
76
+ from .schema import insert_sentinel as insert_sentinel
77
+ from .schema import MetaData as MetaData
78
+ from .schema import PrimaryKeyConstraint as PrimaryKeyConstraint
79
+ from .schema import Sequence as Sequence
80
+ from .schema import Table as Table
81
+ from .schema import UniqueConstraint as UniqueConstraint
82
+ from .sql import ColumnExpressionArgument as ColumnExpressionArgument
83
+ from .sql import NotNullable as NotNullable
84
+ from .sql import Nullable as Nullable
85
+ from .sql import SelectLabelStyle as SelectLabelStyle
86
+ from .sql.expression import Alias as Alias
87
+ from .sql.expression import alias as alias
88
+ from .sql.expression import AliasedReturnsRows as AliasedReturnsRows
89
+ from .sql.expression import all_ as all_
90
+ from .sql.expression import and_ as and_
91
+ from .sql.expression import any_ as any_
92
+ from .sql.expression import asc as asc
93
+ from .sql.expression import between as between
94
+ from .sql.expression import BinaryExpression as BinaryExpression
95
+ from .sql.expression import bindparam as bindparam
96
+ from .sql.expression import BindParameter as BindParameter
97
+ from .sql.expression import bitwise_not as bitwise_not
98
+ from .sql.expression import BooleanClauseList as BooleanClauseList
99
+ from .sql.expression import CacheKey as CacheKey
100
+ from .sql.expression import Case as Case
101
+ from .sql.expression import case as case
102
+ from .sql.expression import Cast as Cast
103
+ from .sql.expression import cast as cast
104
+ from .sql.expression import ClauseElement as ClauseElement
105
+ from .sql.expression import ClauseList as ClauseList
106
+ from .sql.expression import collate as collate
107
+ from .sql.expression import CollectionAggregate as CollectionAggregate
108
+ from .sql.expression import column as column
109
+ from .sql.expression import ColumnClause as ColumnClause
110
+ from .sql.expression import ColumnCollection as ColumnCollection
111
+ from .sql.expression import ColumnElement as ColumnElement
112
+ from .sql.expression import ColumnOperators as ColumnOperators
113
+ from .sql.expression import CompoundSelect as CompoundSelect
114
+ from .sql.expression import CTE as CTE
115
+ from .sql.expression import cte as cte
116
+ from .sql.expression import custom_op as custom_op
117
+ from .sql.expression import Delete as Delete
118
+ from .sql.expression import delete as delete
119
+ from .sql.expression import desc as desc
120
+ from .sql.expression import distinct as distinct
121
+ from .sql.expression import except_ as except_
122
+ from .sql.expression import except_all as except_all
123
+ from .sql.expression import Executable as Executable
124
+ from .sql.expression import Exists as Exists
125
+ from .sql.expression import exists as exists
126
+ from .sql.expression import Extract as Extract
127
+ from .sql.expression import extract as extract
128
+ from .sql.expression import false as false
129
+ from .sql.expression import False_ as False_
130
+ from .sql.expression import FromClause as FromClause
131
+ from .sql.expression import FromGrouping as FromGrouping
132
+ from .sql.expression import func as func
133
+ from .sql.expression import funcfilter as funcfilter
134
+ from .sql.expression import Function as Function
135
+ from .sql.expression import FunctionElement as FunctionElement
136
+ from .sql.expression import FunctionFilter as FunctionFilter
137
+ from .sql.expression import GenerativeSelect as GenerativeSelect
138
+ from .sql.expression import Grouping as Grouping
139
+ from .sql.expression import HasCTE as HasCTE
140
+ from .sql.expression import HasPrefixes as HasPrefixes
141
+ from .sql.expression import HasSuffixes as HasSuffixes
142
+ from .sql.expression import Insert as Insert
143
+ from .sql.expression import insert as insert
144
+ from .sql.expression import intersect as intersect
145
+ from .sql.expression import intersect_all as intersect_all
146
+ from .sql.expression import Join as Join
147
+ from .sql.expression import join as join
148
+ from .sql.expression import Label as Label
149
+ from .sql.expression import label as label
150
+ from .sql.expression import LABEL_STYLE_DEFAULT as LABEL_STYLE_DEFAULT
151
+ from .sql.expression import (
152
+ LABEL_STYLE_DISAMBIGUATE_ONLY as LABEL_STYLE_DISAMBIGUATE_ONLY,
153
+ )
154
+ from .sql.expression import LABEL_STYLE_NONE as LABEL_STYLE_NONE
155
+ from .sql.expression import (
156
+ LABEL_STYLE_TABLENAME_PLUS_COL as LABEL_STYLE_TABLENAME_PLUS_COL,
157
+ )
158
+ from .sql.expression import lambda_stmt as lambda_stmt
159
+ from .sql.expression import LambdaElement as LambdaElement
160
+ from .sql.expression import Lateral as Lateral
161
+ from .sql.expression import lateral as lateral
162
+ from .sql.expression import literal as literal
163
+ from .sql.expression import literal_column as literal_column
164
+ from .sql.expression import modifier as modifier
165
+ from .sql.expression import not_ as not_
166
+ from .sql.expression import Null as Null
167
+ from .sql.expression import null as null
168
+ from .sql.expression import nulls_first as nulls_first
169
+ from .sql.expression import nulls_last as nulls_last
170
+ from .sql.expression import nullsfirst as nullsfirst
171
+ from .sql.expression import nullslast as nullslast
172
+ from .sql.expression import Operators as Operators
173
+ from .sql.expression import or_ as or_
174
+ from .sql.expression import outerjoin as outerjoin
175
+ from .sql.expression import outparam as outparam
176
+ from .sql.expression import Over as Over
177
+ from .sql.expression import over as over
178
+ from .sql.expression import quoted_name as quoted_name
179
+ from .sql.expression import ReleaseSavepointClause as ReleaseSavepointClause
180
+ from .sql.expression import ReturnsRows as ReturnsRows
181
+ from .sql.expression import (
182
+ RollbackToSavepointClause as RollbackToSavepointClause,
183
+ )
184
+ from .sql.expression import SavepointClause as SavepointClause
185
+ from .sql.expression import ScalarSelect as ScalarSelect
186
+ from .sql.expression import Select as Select
187
+ from .sql.expression import select as select
188
+ from .sql.expression import Selectable as Selectable
189
+ from .sql.expression import SelectBase as SelectBase
190
+ from .sql.expression import SQLColumnExpression as SQLColumnExpression
191
+ from .sql.expression import StatementLambdaElement as StatementLambdaElement
192
+ from .sql.expression import Subquery as Subquery
193
+ from .sql.expression import table as table
194
+ from .sql.expression import TableClause as TableClause
195
+ from .sql.expression import TableSample as TableSample
196
+ from .sql.expression import tablesample as tablesample
197
+ from .sql.expression import TableValuedAlias as TableValuedAlias
198
+ from .sql.expression import text as text
199
+ from .sql.expression import TextAsFrom as TextAsFrom
200
+ from .sql.expression import TextClause as TextClause
201
+ from .sql.expression import TextualSelect as TextualSelect
202
+ from .sql.expression import true as true
203
+ from .sql.expression import True_ as True_
204
+ from .sql.expression import try_cast as try_cast
205
+ from .sql.expression import TryCast as TryCast
206
+ from .sql.expression import Tuple as Tuple
207
+ from .sql.expression import tuple_ as tuple_
208
+ from .sql.expression import type_coerce as type_coerce
209
+ from .sql.expression import TypeClause as TypeClause
210
+ from .sql.expression import TypeCoerce as TypeCoerce
211
+ from .sql.expression import UnaryExpression as UnaryExpression
212
+ from .sql.expression import union as union
213
+ from .sql.expression import union_all as union_all
214
+ from .sql.expression import Update as Update
215
+ from .sql.expression import update as update
216
+ from .sql.expression import UpdateBase as UpdateBase
217
+ from .sql.expression import Values as Values
218
+ from .sql.expression import values as values
219
+ from .sql.expression import ValuesBase as ValuesBase
220
+ from .sql.expression import Visitable as Visitable
221
+ from .sql.expression import within_group as within_group
222
+ from .sql.expression import WithinGroup as WithinGroup
223
+ from .types import ARRAY as ARRAY
224
+ from .types import BIGINT as BIGINT
225
+ from .types import BigInteger as BigInteger
226
+ from .types import BINARY as BINARY
227
+ from .types import BLOB as BLOB
228
+ from .types import BOOLEAN as BOOLEAN
229
+ from .types import Boolean as Boolean
230
+ from .types import CHAR as CHAR
231
+ from .types import CLOB as CLOB
232
+ from .types import DATE as DATE
233
+ from .types import Date as Date
234
+ from .types import DATETIME as DATETIME
235
+ from .types import DateTime as DateTime
236
+ from .types import DECIMAL as DECIMAL
237
+ from .types import DOUBLE as DOUBLE
238
+ from .types import Double as Double
239
+ from .types import DOUBLE_PRECISION as DOUBLE_PRECISION
240
+ from .types import Enum as Enum
241
+ from .types import FLOAT as FLOAT
242
+ from .types import Float as Float
243
+ from .types import INT as INT
244
+ from .types import INTEGER as INTEGER
245
+ from .types import Integer as Integer
246
+ from .types import Interval as Interval
247
+ from .types import JSON as JSON
248
+ from .types import LargeBinary as LargeBinary
249
+ from .types import NCHAR as NCHAR
250
+ from .types import NUMERIC as NUMERIC
251
+ from .types import Numeric as Numeric
252
+ from .types import NVARCHAR as NVARCHAR
253
+ from .types import PickleType as PickleType
254
+ from .types import REAL as REAL
255
+ from .types import SMALLINT as SMALLINT
256
+ from .types import SmallInteger as SmallInteger
257
+ from .types import String as String
258
+ from .types import TEXT as TEXT
259
+ from .types import Text as Text
260
+ from .types import TIME as TIME
261
+ from .types import Time as Time
262
+ from .types import TIMESTAMP as TIMESTAMP
263
+ from .types import TupleType as TupleType
264
+ from .types import TypeDecorator as TypeDecorator
265
+ from .types import Unicode as Unicode
266
+ from .types import UnicodeText as UnicodeText
267
+ from .types import UUID as UUID
268
+ from .types import Uuid as Uuid
269
+ from .types import VARBINARY as VARBINARY
270
+ from .types import VARCHAR as VARCHAR
271
+
272
+ __version__ = "2.0.47"
273
+
274
+
275
+ def __go(lcls: Any) -> None:
276
+ _util.preloaded.import_prefix("sqlalchemy")
277
+
278
+ from . import exc
279
+
280
+ exc._version_token = "".join(__version__.split(".")[0:2])
281
+
282
+
283
+ __go(locals())
@@ -0,0 +1,18 @@
1
+ # connectors/__init__.py
2
+ # Copyright (C) 2005-2026 the SQLAlchemy authors and contributors
3
+ # <see AUTHORS file>
4
+ #
5
+ # This module is part of SQLAlchemy and is released under
6
+ # the MIT License: https://www.opensource.org/licenses/mit-license.php
7
+
8
+
9
+ from ..engine.interfaces import Dialect
10
+
11
+
12
+ class Connector(Dialect):
13
+ """Base class for dialect mixins, for DBAPIs that work
14
+ across entirely different database backends.
15
+
16
+ Currently the only such mixin is pyodbc.
17
+
18
+ """
@@ -0,0 +1,184 @@
1
+ # connectors/aioodbc.py
2
+ # Copyright (C) 2005-2026 the SQLAlchemy authors and contributors
3
+ # <see AUTHORS file>
4
+ #
5
+ # This module is part of SQLAlchemy and is released under
6
+ # the MIT License: https://www.opensource.org/licenses/mit-license.php
7
+ # mypy: ignore-errors
8
+
9
+ from __future__ import annotations
10
+
11
+ from typing import TYPE_CHECKING
12
+
13
+ from .asyncio import AsyncAdapt_dbapi_connection
14
+ from .asyncio import AsyncAdapt_dbapi_cursor
15
+ from .asyncio import AsyncAdapt_dbapi_ss_cursor
16
+ from .asyncio import AsyncAdaptFallback_dbapi_connection
17
+ from .pyodbc import PyODBCConnector
18
+ from .. import pool
19
+ from .. import util
20
+ from ..util.concurrency import await_fallback
21
+ from ..util.concurrency import await_only
22
+
23
+
24
+ if TYPE_CHECKING:
25
+ from ..engine.interfaces import ConnectArgsType
26
+ from ..engine.url import URL
27
+
28
+
29
+ class AsyncAdapt_aioodbc_cursor(AsyncAdapt_dbapi_cursor):
30
+ __slots__ = ()
31
+
32
+ def setinputsizes(self, *inputsizes):
33
+ # see https://github.com/aio-libs/aioodbc/issues/451
34
+ return self._cursor._impl.setinputsizes(*inputsizes)
35
+
36
+ # how it's supposed to work
37
+ # return self.await_(self._cursor.setinputsizes(*inputsizes))
38
+
39
+
40
+ class AsyncAdapt_aioodbc_ss_cursor(
41
+ AsyncAdapt_aioodbc_cursor, AsyncAdapt_dbapi_ss_cursor
42
+ ):
43
+ __slots__ = ()
44
+
45
+
46
+ class AsyncAdapt_aioodbc_connection(AsyncAdapt_dbapi_connection):
47
+ _cursor_cls = AsyncAdapt_aioodbc_cursor
48
+ _ss_cursor_cls = AsyncAdapt_aioodbc_ss_cursor
49
+ __slots__ = ()
50
+
51
+ @property
52
+ def autocommit(self):
53
+ return self._connection.autocommit
54
+
55
+ @autocommit.setter
56
+ def autocommit(self, value):
57
+ # https://github.com/aio-libs/aioodbc/issues/448
58
+ # self._connection.autocommit = value
59
+
60
+ self._connection._conn.autocommit = value
61
+
62
+ def ping(self, reconnect):
63
+ return self.await_(self._connection.ping(reconnect))
64
+
65
+ def add_output_converter(self, *arg, **kw):
66
+ self._connection.add_output_converter(*arg, **kw)
67
+
68
+ def character_set_name(self):
69
+ return self._connection.character_set_name()
70
+
71
+ def cursor(self, server_side=False):
72
+ # aioodbc sets connection=None when closed and just fails with
73
+ # AttributeError here. Here we use the same ProgrammingError +
74
+ # message that pyodbc uses, so it triggers is_disconnect() as well.
75
+ if self._connection.closed:
76
+ raise self.dbapi.ProgrammingError(
77
+ "Attempt to use a closed connection."
78
+ )
79
+ return super().cursor(server_side=server_side)
80
+
81
+ def rollback(self):
82
+ # aioodbc sets connection=None when closed and just fails with
83
+ # AttributeError here. should be a no-op
84
+ if not self._connection.closed:
85
+ super().rollback()
86
+
87
+ def commit(self):
88
+ # aioodbc sets connection=None when closed and just fails with
89
+ # AttributeError here. should be a no-op
90
+ if not self._connection.closed:
91
+ super().commit()
92
+
93
+ def close(self):
94
+ # aioodbc sets connection=None when closed and just fails with
95
+ # AttributeError here. should be a no-op
96
+ if not self._connection.closed:
97
+ super().close()
98
+
99
+
100
+ class AsyncAdaptFallback_aioodbc_connection(
101
+ AsyncAdaptFallback_dbapi_connection, AsyncAdapt_aioodbc_connection
102
+ ):
103
+ __slots__ = ()
104
+
105
+
106
+ class AsyncAdapt_aioodbc_dbapi:
107
+ def __init__(self, aioodbc, pyodbc):
108
+ self.aioodbc = aioodbc
109
+ self.pyodbc = pyodbc
110
+ self.paramstyle = pyodbc.paramstyle
111
+ self._init_dbapi_attributes()
112
+ self.Cursor = AsyncAdapt_dbapi_cursor
113
+ self.version = pyodbc.version
114
+
115
+ def _init_dbapi_attributes(self):
116
+ for name in (
117
+ "Warning",
118
+ "Error",
119
+ "InterfaceError",
120
+ "DataError",
121
+ "DatabaseError",
122
+ "OperationalError",
123
+ "InterfaceError",
124
+ "IntegrityError",
125
+ "ProgrammingError",
126
+ "InternalError",
127
+ "NotSupportedError",
128
+ "NUMBER",
129
+ "STRING",
130
+ "DATETIME",
131
+ "BINARY",
132
+ "Binary",
133
+ "BinaryNull",
134
+ "SQL_VARCHAR",
135
+ "SQL_WVARCHAR",
136
+ ):
137
+ setattr(self, name, getattr(self.pyodbc, name))
138
+
139
+ def connect(self, *arg, **kw):
140
+ async_fallback = kw.pop("async_fallback", False)
141
+ creator_fn = kw.pop("async_creator_fn", self.aioodbc.connect)
142
+
143
+ if util.asbool(async_fallback):
144
+ return AsyncAdaptFallback_aioodbc_connection(
145
+ self,
146
+ await_fallback(creator_fn(*arg, **kw)),
147
+ )
148
+ else:
149
+ return AsyncAdapt_aioodbc_connection(
150
+ self,
151
+ await_only(creator_fn(*arg, **kw)),
152
+ )
153
+
154
+
155
+ class aiodbcConnector(PyODBCConnector):
156
+ is_async = True
157
+ supports_statement_cache = True
158
+
159
+ supports_server_side_cursors = True
160
+
161
+ @classmethod
162
+ def import_dbapi(cls):
163
+ return AsyncAdapt_aioodbc_dbapi(
164
+ __import__("aioodbc"), __import__("pyodbc")
165
+ )
166
+
167
+ def create_connect_args(self, url: URL) -> ConnectArgsType:
168
+ arg, kw = super().create_connect_args(url)
169
+ if arg and arg[0]:
170
+ kw["dsn"] = arg[0]
171
+
172
+ return (), kw
173
+
174
+ @classmethod
175
+ def get_pool_class(cls, url):
176
+ async_fallback = url.query.get("async_fallback", False)
177
+
178
+ if util.asbool(async_fallback):
179
+ return pool.FallbackAsyncAdaptedQueuePool
180
+ else:
181
+ return pool.AsyncAdaptedQueuePool
182
+
183
+ def get_driver_connection(self, connection):
184
+ return connection._connection