SQLAlchemy 2.1.0b2__cp313-cp313t-win_arm64.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 (270) hide show
  1. sqlalchemy/__init__.py +298 -0
  2. sqlalchemy/connectors/__init__.py +18 -0
  3. sqlalchemy/connectors/aioodbc.py +171 -0
  4. sqlalchemy/connectors/asyncio.py +476 -0
  5. sqlalchemy/connectors/pyodbc.py +250 -0
  6. sqlalchemy/dialects/__init__.py +62 -0
  7. sqlalchemy/dialects/_typing.py +30 -0
  8. sqlalchemy/dialects/mssql/__init__.py +89 -0
  9. sqlalchemy/dialects/mssql/aioodbc.py +63 -0
  10. sqlalchemy/dialects/mssql/base.py +4166 -0
  11. sqlalchemy/dialects/mssql/information_schema.py +285 -0
  12. sqlalchemy/dialects/mssql/json.py +140 -0
  13. sqlalchemy/dialects/mssql/mssqlpython.py +220 -0
  14. sqlalchemy/dialects/mssql/provision.py +196 -0
  15. sqlalchemy/dialects/mssql/pymssql.py +126 -0
  16. sqlalchemy/dialects/mssql/pyodbc.py +698 -0
  17. sqlalchemy/dialects/mysql/__init__.py +106 -0
  18. sqlalchemy/dialects/mysql/_mariadb_shim.py +312 -0
  19. sqlalchemy/dialects/mysql/aiomysql.py +226 -0
  20. sqlalchemy/dialects/mysql/asyncmy.py +214 -0
  21. sqlalchemy/dialects/mysql/base.py +3877 -0
  22. sqlalchemy/dialects/mysql/cymysql.py +106 -0
  23. sqlalchemy/dialects/mysql/dml.py +279 -0
  24. sqlalchemy/dialects/mysql/enumerated.py +277 -0
  25. sqlalchemy/dialects/mysql/expression.py +146 -0
  26. sqlalchemy/dialects/mysql/json.py +92 -0
  27. sqlalchemy/dialects/mysql/mariadb.py +67 -0
  28. sqlalchemy/dialects/mysql/mariadbconnector.py +330 -0
  29. sqlalchemy/dialects/mysql/mysqlconnector.py +296 -0
  30. sqlalchemy/dialects/mysql/mysqldb.py +312 -0
  31. sqlalchemy/dialects/mysql/provision.py +153 -0
  32. sqlalchemy/dialects/mysql/pymysql.py +157 -0
  33. sqlalchemy/dialects/mysql/pyodbc.py +156 -0
  34. sqlalchemy/dialects/mysql/reflection.py +724 -0
  35. sqlalchemy/dialects/mysql/reserved_words.py +570 -0
  36. sqlalchemy/dialects/mysql/types.py +845 -0
  37. sqlalchemy/dialects/oracle/__init__.py +85 -0
  38. sqlalchemy/dialects/oracle/base.py +3977 -0
  39. sqlalchemy/dialects/oracle/cx_oracle.py +1601 -0
  40. sqlalchemy/dialects/oracle/dictionary.py +507 -0
  41. sqlalchemy/dialects/oracle/json.py +158 -0
  42. sqlalchemy/dialects/oracle/oracledb.py +909 -0
  43. sqlalchemy/dialects/oracle/provision.py +288 -0
  44. sqlalchemy/dialects/oracle/types.py +367 -0
  45. sqlalchemy/dialects/oracle/vector.py +368 -0
  46. sqlalchemy/dialects/postgresql/__init__.py +171 -0
  47. sqlalchemy/dialects/postgresql/_psycopg_common.py +229 -0
  48. sqlalchemy/dialects/postgresql/array.py +534 -0
  49. sqlalchemy/dialects/postgresql/asyncpg.py +1323 -0
  50. sqlalchemy/dialects/postgresql/base.py +5789 -0
  51. sqlalchemy/dialects/postgresql/bitstring.py +327 -0
  52. sqlalchemy/dialects/postgresql/dml.py +360 -0
  53. sqlalchemy/dialects/postgresql/ext.py +593 -0
  54. sqlalchemy/dialects/postgresql/hstore.py +423 -0
  55. sqlalchemy/dialects/postgresql/json.py +408 -0
  56. sqlalchemy/dialects/postgresql/named_types.py +521 -0
  57. sqlalchemy/dialects/postgresql/operators.py +130 -0
  58. sqlalchemy/dialects/postgresql/pg8000.py +670 -0
  59. sqlalchemy/dialects/postgresql/pg_catalog.py +344 -0
  60. sqlalchemy/dialects/postgresql/provision.py +184 -0
  61. sqlalchemy/dialects/postgresql/psycopg.py +799 -0
  62. sqlalchemy/dialects/postgresql/psycopg2.py +860 -0
  63. sqlalchemy/dialects/postgresql/psycopg2cffi.py +61 -0
  64. sqlalchemy/dialects/postgresql/ranges.py +1002 -0
  65. sqlalchemy/dialects/postgresql/types.py +388 -0
  66. sqlalchemy/dialects/sqlite/__init__.py +57 -0
  67. sqlalchemy/dialects/sqlite/aiosqlite.py +321 -0
  68. sqlalchemy/dialects/sqlite/base.py +3063 -0
  69. sqlalchemy/dialects/sqlite/dml.py +279 -0
  70. sqlalchemy/dialects/sqlite/json.py +100 -0
  71. sqlalchemy/dialects/sqlite/provision.py +229 -0
  72. sqlalchemy/dialects/sqlite/pysqlcipher.py +161 -0
  73. sqlalchemy/dialects/sqlite/pysqlite.py +754 -0
  74. sqlalchemy/dialects/type_migration_guidelines.txt +145 -0
  75. sqlalchemy/engine/__init__.py +62 -0
  76. sqlalchemy/engine/_processors_cy.cp313t-win_arm64.pyd +0 -0
  77. sqlalchemy/engine/_processors_cy.py +92 -0
  78. sqlalchemy/engine/_result_cy.cp313t-win_arm64.pyd +0 -0
  79. sqlalchemy/engine/_result_cy.py +633 -0
  80. sqlalchemy/engine/_row_cy.cp313t-win_arm64.pyd +0 -0
  81. sqlalchemy/engine/_row_cy.py +232 -0
  82. sqlalchemy/engine/_util_cy.cp313t-win_arm64.pyd +0 -0
  83. sqlalchemy/engine/_util_cy.py +136 -0
  84. sqlalchemy/engine/base.py +3354 -0
  85. sqlalchemy/engine/characteristics.py +155 -0
  86. sqlalchemy/engine/create.py +877 -0
  87. sqlalchemy/engine/cursor.py +2421 -0
  88. sqlalchemy/engine/default.py +2402 -0
  89. sqlalchemy/engine/events.py +965 -0
  90. sqlalchemy/engine/interfaces.py +3495 -0
  91. sqlalchemy/engine/mock.py +134 -0
  92. sqlalchemy/engine/processors.py +82 -0
  93. sqlalchemy/engine/reflection.py +2100 -0
  94. sqlalchemy/engine/result.py +1966 -0
  95. sqlalchemy/engine/row.py +397 -0
  96. sqlalchemy/engine/strategies.py +16 -0
  97. sqlalchemy/engine/url.py +922 -0
  98. sqlalchemy/engine/util.py +156 -0
  99. sqlalchemy/event/__init__.py +26 -0
  100. sqlalchemy/event/api.py +220 -0
  101. sqlalchemy/event/attr.py +674 -0
  102. sqlalchemy/event/base.py +472 -0
  103. sqlalchemy/event/legacy.py +258 -0
  104. sqlalchemy/event/registry.py +390 -0
  105. sqlalchemy/events.py +17 -0
  106. sqlalchemy/exc.py +922 -0
  107. sqlalchemy/ext/__init__.py +11 -0
  108. sqlalchemy/ext/associationproxy.py +2072 -0
  109. sqlalchemy/ext/asyncio/__init__.py +29 -0
  110. sqlalchemy/ext/asyncio/base.py +281 -0
  111. sqlalchemy/ext/asyncio/engine.py +1487 -0
  112. sqlalchemy/ext/asyncio/exc.py +21 -0
  113. sqlalchemy/ext/asyncio/result.py +994 -0
  114. sqlalchemy/ext/asyncio/scoping.py +1679 -0
  115. sqlalchemy/ext/asyncio/session.py +2007 -0
  116. sqlalchemy/ext/automap.py +1701 -0
  117. sqlalchemy/ext/baked.py +559 -0
  118. sqlalchemy/ext/compiler.py +600 -0
  119. sqlalchemy/ext/declarative/__init__.py +65 -0
  120. sqlalchemy/ext/declarative/extensions.py +560 -0
  121. sqlalchemy/ext/horizontal_shard.py +481 -0
  122. sqlalchemy/ext/hybrid.py +1877 -0
  123. sqlalchemy/ext/indexable.py +364 -0
  124. sqlalchemy/ext/instrumentation.py +450 -0
  125. sqlalchemy/ext/mutable.py +1081 -0
  126. sqlalchemy/ext/orderinglist.py +439 -0
  127. sqlalchemy/ext/serializer.py +185 -0
  128. sqlalchemy/future/__init__.py +16 -0
  129. sqlalchemy/future/engine.py +15 -0
  130. sqlalchemy/inspection.py +174 -0
  131. sqlalchemy/log.py +283 -0
  132. sqlalchemy/orm/__init__.py +176 -0
  133. sqlalchemy/orm/_orm_constructors.py +2694 -0
  134. sqlalchemy/orm/_typing.py +179 -0
  135. sqlalchemy/orm/attributes.py +2868 -0
  136. sqlalchemy/orm/base.py +976 -0
  137. sqlalchemy/orm/bulk_persistence.py +2152 -0
  138. sqlalchemy/orm/clsregistry.py +582 -0
  139. sqlalchemy/orm/collections.py +1568 -0
  140. sqlalchemy/orm/context.py +3471 -0
  141. sqlalchemy/orm/decl_api.py +2280 -0
  142. sqlalchemy/orm/decl_base.py +2309 -0
  143. sqlalchemy/orm/dependency.py +1306 -0
  144. sqlalchemy/orm/descriptor_props.py +1183 -0
  145. sqlalchemy/orm/dynamic.py +307 -0
  146. sqlalchemy/orm/evaluator.py +379 -0
  147. sqlalchemy/orm/events.py +3386 -0
  148. sqlalchemy/orm/exc.py +237 -0
  149. sqlalchemy/orm/identity.py +302 -0
  150. sqlalchemy/orm/instrumentation.py +746 -0
  151. sqlalchemy/orm/interfaces.py +1589 -0
  152. sqlalchemy/orm/loading.py +1684 -0
  153. sqlalchemy/orm/mapped_collection.py +557 -0
  154. sqlalchemy/orm/mapper.py +4411 -0
  155. sqlalchemy/orm/path_registry.py +829 -0
  156. sqlalchemy/orm/persistence.py +1789 -0
  157. sqlalchemy/orm/properties.py +973 -0
  158. sqlalchemy/orm/query.py +3528 -0
  159. sqlalchemy/orm/relationships.py +3570 -0
  160. sqlalchemy/orm/scoping.py +2232 -0
  161. sqlalchemy/orm/session.py +5403 -0
  162. sqlalchemy/orm/state.py +1175 -0
  163. sqlalchemy/orm/state_changes.py +196 -0
  164. sqlalchemy/orm/strategies.py +3492 -0
  165. sqlalchemy/orm/strategy_options.py +2562 -0
  166. sqlalchemy/orm/sync.py +164 -0
  167. sqlalchemy/orm/unitofwork.py +798 -0
  168. sqlalchemy/orm/util.py +2438 -0
  169. sqlalchemy/orm/writeonly.py +694 -0
  170. sqlalchemy/pool/__init__.py +41 -0
  171. sqlalchemy/pool/base.py +1522 -0
  172. sqlalchemy/pool/events.py +375 -0
  173. sqlalchemy/pool/impl.py +582 -0
  174. sqlalchemy/py.typed +0 -0
  175. sqlalchemy/schema.py +74 -0
  176. sqlalchemy/sql/__init__.py +156 -0
  177. sqlalchemy/sql/_annotated_cols.py +397 -0
  178. sqlalchemy/sql/_dml_constructors.py +132 -0
  179. sqlalchemy/sql/_elements_constructors.py +2164 -0
  180. sqlalchemy/sql/_orm_types.py +20 -0
  181. sqlalchemy/sql/_selectable_constructors.py +840 -0
  182. sqlalchemy/sql/_typing.py +487 -0
  183. sqlalchemy/sql/_util_cy.cp313t-win_arm64.pyd +0 -0
  184. sqlalchemy/sql/_util_cy.py +127 -0
  185. sqlalchemy/sql/annotation.py +590 -0
  186. sqlalchemy/sql/base.py +2699 -0
  187. sqlalchemy/sql/cache_key.py +1066 -0
  188. sqlalchemy/sql/coercions.py +1373 -0
  189. sqlalchemy/sql/compiler.py +8327 -0
  190. sqlalchemy/sql/crud.py +1815 -0
  191. sqlalchemy/sql/ddl.py +1928 -0
  192. sqlalchemy/sql/default_comparator.py +654 -0
  193. sqlalchemy/sql/dml.py +1977 -0
  194. sqlalchemy/sql/elements.py +6033 -0
  195. sqlalchemy/sql/events.py +458 -0
  196. sqlalchemy/sql/expression.py +172 -0
  197. sqlalchemy/sql/functions.py +2305 -0
  198. sqlalchemy/sql/lambdas.py +1443 -0
  199. sqlalchemy/sql/naming.py +209 -0
  200. sqlalchemy/sql/operators.py +2897 -0
  201. sqlalchemy/sql/roles.py +332 -0
  202. sqlalchemy/sql/schema.py +6703 -0
  203. sqlalchemy/sql/selectable.py +7553 -0
  204. sqlalchemy/sql/sqltypes.py +4093 -0
  205. sqlalchemy/sql/traversals.py +1042 -0
  206. sqlalchemy/sql/type_api.py +2446 -0
  207. sqlalchemy/sql/util.py +1495 -0
  208. sqlalchemy/sql/visitors.py +1157 -0
  209. sqlalchemy/testing/__init__.py +96 -0
  210. sqlalchemy/testing/assertions.py +1007 -0
  211. sqlalchemy/testing/assertsql.py +519 -0
  212. sqlalchemy/testing/asyncio.py +128 -0
  213. sqlalchemy/testing/config.py +440 -0
  214. sqlalchemy/testing/engines.py +483 -0
  215. sqlalchemy/testing/entities.py +117 -0
  216. sqlalchemy/testing/exclusions.py +476 -0
  217. sqlalchemy/testing/fixtures/__init__.py +30 -0
  218. sqlalchemy/testing/fixtures/base.py +384 -0
  219. sqlalchemy/testing/fixtures/mypy.py +247 -0
  220. sqlalchemy/testing/fixtures/orm.py +227 -0
  221. sqlalchemy/testing/fixtures/sql.py +538 -0
  222. sqlalchemy/testing/pickleable.py +155 -0
  223. sqlalchemy/testing/plugin/__init__.py +6 -0
  224. sqlalchemy/testing/plugin/bootstrap.py +51 -0
  225. sqlalchemy/testing/plugin/plugin_base.py +828 -0
  226. sqlalchemy/testing/plugin/pytestplugin.py +892 -0
  227. sqlalchemy/testing/profiling.py +329 -0
  228. sqlalchemy/testing/provision.py +613 -0
  229. sqlalchemy/testing/requirements.py +1978 -0
  230. sqlalchemy/testing/schema.py +198 -0
  231. sqlalchemy/testing/suite/__init__.py +19 -0
  232. sqlalchemy/testing/suite/test_cte.py +237 -0
  233. sqlalchemy/testing/suite/test_ddl.py +420 -0
  234. sqlalchemy/testing/suite/test_dialect.py +776 -0
  235. sqlalchemy/testing/suite/test_insert.py +630 -0
  236. sqlalchemy/testing/suite/test_reflection.py +3557 -0
  237. sqlalchemy/testing/suite/test_results.py +660 -0
  238. sqlalchemy/testing/suite/test_rowcount.py +258 -0
  239. sqlalchemy/testing/suite/test_select.py +2112 -0
  240. sqlalchemy/testing/suite/test_sequence.py +317 -0
  241. sqlalchemy/testing/suite/test_table_via_select.py +686 -0
  242. sqlalchemy/testing/suite/test_types.py +2271 -0
  243. sqlalchemy/testing/suite/test_unicode_ddl.py +189 -0
  244. sqlalchemy/testing/suite/test_update_delete.py +139 -0
  245. sqlalchemy/testing/util.py +535 -0
  246. sqlalchemy/testing/warnings.py +52 -0
  247. sqlalchemy/types.py +76 -0
  248. sqlalchemy/util/__init__.py +158 -0
  249. sqlalchemy/util/_collections.py +688 -0
  250. sqlalchemy/util/_collections_cy.cp313t-win_arm64.pyd +0 -0
  251. sqlalchemy/util/_collections_cy.pxd +8 -0
  252. sqlalchemy/util/_collections_cy.py +516 -0
  253. sqlalchemy/util/_has_cython.py +46 -0
  254. sqlalchemy/util/_immutabledict_cy.cp313t-win_arm64.pyd +0 -0
  255. sqlalchemy/util/_immutabledict_cy.py +240 -0
  256. sqlalchemy/util/compat.py +299 -0
  257. sqlalchemy/util/concurrency.py +322 -0
  258. sqlalchemy/util/cython.py +79 -0
  259. sqlalchemy/util/deprecations.py +401 -0
  260. sqlalchemy/util/langhelpers.py +2320 -0
  261. sqlalchemy/util/preloaded.py +152 -0
  262. sqlalchemy/util/queue.py +304 -0
  263. sqlalchemy/util/tool_support.py +201 -0
  264. sqlalchemy/util/topological.py +120 -0
  265. sqlalchemy/util/typing.py +711 -0
  266. sqlalchemy-2.1.0b2.dist-info/METADATA +269 -0
  267. sqlalchemy-2.1.0b2.dist-info/RECORD +270 -0
  268. sqlalchemy-2.1.0b2.dist-info/WHEEL +5 -0
  269. sqlalchemy-2.1.0b2.dist-info/licenses/LICENSE +19 -0
  270. sqlalchemy-2.1.0b2.dist-info/top_level.txt +1 -0
sqlalchemy/__init__.py ADDED
@@ -0,0 +1,298 @@
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 NullPool as NullPool
51
+ from .pool import Pool as Pool
52
+ from .pool import PoolProxiedConnection as PoolProxiedConnection
53
+ from .pool import PoolResetState as PoolResetState
54
+ from .pool import QueuePool as QueuePool
55
+ from .pool import SingletonThreadPool as SingletonThreadPool
56
+ from .pool import StaticPool as StaticPool
57
+ from .schema import BaseDDLElement as BaseDDLElement
58
+ from .schema import BLANK_SCHEMA as BLANK_SCHEMA
59
+ from .schema import CheckConstraint as CheckConstraint
60
+ from .schema import CheckFirst as CheckFirst
61
+ from .schema import Column as Column
62
+ from .schema import ColumnDefault as ColumnDefault
63
+ from .schema import Computed as Computed
64
+ from .schema import Constraint as Constraint
65
+ from .schema import CreateTable as CreateTable
66
+ from .schema import CreateTableAs as CreateTableAs
67
+ from .schema import CreateView as CreateView
68
+ from .schema import DDL as DDL
69
+ from .schema import DDLElement as DDLElement
70
+ from .schema import DefaultClause as DefaultClause
71
+ from .schema import DropTable as DropTable
72
+ from .schema import DropView as DropView
73
+ from .schema import ExecutableDDLElement as ExecutableDDLElement
74
+ from .schema import FetchedValue as FetchedValue
75
+ from .schema import ForeignKey as ForeignKey
76
+ from .schema import ForeignKeyConstraint as ForeignKeyConstraint
77
+ from .schema import Identity as Identity
78
+ from .schema import Index as Index
79
+ from .schema import insert_sentinel as insert_sentinel
80
+ from .schema import MetaData as MetaData
81
+ from .schema import Named as Named
82
+ from .schema import PrimaryKeyConstraint as PrimaryKeyConstraint
83
+ from .schema import Sequence as Sequence
84
+ from .schema import Table as Table
85
+ from .schema import TypedColumns as TypedColumns
86
+ from .schema import UniqueConstraint as UniqueConstraint
87
+ from .sql import ColumnExpressionArgument as ColumnExpressionArgument
88
+ from .sql import NotNullable as NotNullable
89
+ from .sql import Nullable as Nullable
90
+ from .sql import SelectLabelStyle as SelectLabelStyle
91
+ from .sql.expression import aggregate_order_by as aggregate_order_by
92
+ from .sql.expression import AggregateOrderBy as AggregateOrderBy
93
+ from .sql.expression import Alias as Alias
94
+ from .sql.expression import alias as alias
95
+ from .sql.expression import AliasedReturnsRows as AliasedReturnsRows
96
+ from .sql.expression import all_ as all_
97
+ from .sql.expression import and_ as and_
98
+ from .sql.expression import any_ as any_
99
+ from .sql.expression import asc as asc
100
+ from .sql.expression import between as between
101
+ from .sql.expression import BinaryExpression as BinaryExpression
102
+ from .sql.expression import bindparam as bindparam
103
+ from .sql.expression import BindParameter as BindParameter
104
+ from .sql.expression import bitwise_not as bitwise_not
105
+ from .sql.expression import BooleanClauseList as BooleanClauseList
106
+ from .sql.expression import CacheKey as CacheKey
107
+ from .sql.expression import Case as Case
108
+ from .sql.expression import case as case
109
+ from .sql.expression import Cast as Cast
110
+ from .sql.expression import cast as cast
111
+ from .sql.expression import ClauseElement as ClauseElement
112
+ from .sql.expression import ClauseList as ClauseList
113
+ from .sql.expression import collate as collate
114
+ from .sql.expression import CollectionAggregate as CollectionAggregate
115
+ from .sql.expression import column as column
116
+ from .sql.expression import ColumnClause as ColumnClause
117
+ from .sql.expression import ColumnCollection as ColumnCollection
118
+ from .sql.expression import ColumnElement as ColumnElement
119
+ from .sql.expression import ColumnOperators as ColumnOperators
120
+ from .sql.expression import CompoundSelect as CompoundSelect
121
+ from .sql.expression import CTE as CTE
122
+ from .sql.expression import cte as cte
123
+ from .sql.expression import custom_op as custom_op
124
+ from .sql.expression import Delete as Delete
125
+ from .sql.expression import delete as delete
126
+ from .sql.expression import desc as desc
127
+ from .sql.expression import distinct as distinct
128
+ from .sql.expression import except_ as except_
129
+ from .sql.expression import except_all as except_all
130
+ from .sql.expression import Executable as Executable
131
+ from .sql.expression import Exists as Exists
132
+ from .sql.expression import exists as exists
133
+ from .sql.expression import Extract as Extract
134
+ from .sql.expression import extract as extract
135
+ from .sql.expression import false as false
136
+ from .sql.expression import False_ as False_
137
+ from .sql.expression import FrameClause as FrameClause
138
+ from .sql.expression import FrameClauseType as FrameClauseType
139
+ from .sql.expression import from_dml_column as from_dml_column
140
+ from .sql.expression import FromClause as FromClause
141
+ from .sql.expression import FromGrouping as FromGrouping
142
+ from .sql.expression import func as func
143
+ from .sql.expression import funcfilter as funcfilter
144
+ from .sql.expression import Function as Function
145
+ from .sql.expression import FunctionElement as FunctionElement
146
+ from .sql.expression import FunctionFilter as FunctionFilter
147
+ from .sql.expression import GenerativeSelect as GenerativeSelect
148
+ from .sql.expression import Grouping as Grouping
149
+ from .sql.expression import HasCTE as HasCTE
150
+ from .sql.expression import HasPrefixes as HasPrefixes
151
+ from .sql.expression import HasSuffixes as HasSuffixes
152
+ from .sql.expression import Insert as Insert
153
+ from .sql.expression import insert as insert
154
+ from .sql.expression import intersect as intersect
155
+ from .sql.expression import intersect_all as intersect_all
156
+ from .sql.expression import Join as Join
157
+ from .sql.expression import join as join
158
+ from .sql.expression import Label as Label
159
+ from .sql.expression import label as label
160
+ from .sql.expression import LABEL_STYLE_DEFAULT as LABEL_STYLE_DEFAULT
161
+ from .sql.expression import (
162
+ LABEL_STYLE_DISAMBIGUATE_ONLY as LABEL_STYLE_DISAMBIGUATE_ONLY,
163
+ )
164
+ from .sql.expression import LABEL_STYLE_NONE as LABEL_STYLE_NONE
165
+ from .sql.expression import (
166
+ LABEL_STYLE_TABLENAME_PLUS_COL as LABEL_STYLE_TABLENAME_PLUS_COL,
167
+ )
168
+ from .sql.expression import lambda_stmt as lambda_stmt
169
+ from .sql.expression import LambdaElement as LambdaElement
170
+ from .sql.expression import Lateral as Lateral
171
+ from .sql.expression import lateral as lateral
172
+ from .sql.expression import literal as literal
173
+ from .sql.expression import literal_column as literal_column
174
+ from .sql.expression import modifier as modifier
175
+ from .sql.expression import not_ as not_
176
+ from .sql.expression import Null as Null
177
+ from .sql.expression import null as null
178
+ from .sql.expression import nulls_first as nulls_first
179
+ from .sql.expression import nulls_last as nulls_last
180
+ from .sql.expression import nullsfirst as nullsfirst
181
+ from .sql.expression import nullslast as nullslast
182
+ from .sql.expression import Operators as Operators
183
+ from .sql.expression import or_ as or_
184
+ from .sql.expression import OrderByList as OrderByList
185
+ from .sql.expression import outerjoin as outerjoin
186
+ from .sql.expression import outparam as outparam
187
+ from .sql.expression import Over as Over
188
+ from .sql.expression import over as over
189
+ from .sql.expression import quoted_name as quoted_name
190
+ from .sql.expression import ReleaseSavepointClause as ReleaseSavepointClause
191
+ from .sql.expression import ReturnsRows as ReturnsRows
192
+ from .sql.expression import (
193
+ RollbackToSavepointClause as RollbackToSavepointClause,
194
+ )
195
+ from .sql.expression import SavepointClause as SavepointClause
196
+ from .sql.expression import ScalarSelect as ScalarSelect
197
+ from .sql.expression import Select as Select
198
+ from .sql.expression import select as select
199
+ from .sql.expression import Selectable as Selectable
200
+ from .sql.expression import SelectBase as SelectBase
201
+ from .sql.expression import SQLColumnExpression as SQLColumnExpression
202
+ from .sql.expression import StatementLambdaElement as StatementLambdaElement
203
+ from .sql.expression import Subquery as Subquery
204
+ from .sql.expression import table as table
205
+ from .sql.expression import TableClause as TableClause
206
+ from .sql.expression import TableSample as TableSample
207
+ from .sql.expression import tablesample as tablesample
208
+ from .sql.expression import TableValuedAlias as TableValuedAlias
209
+ from .sql.expression import TableValuedColumn as TableValuedColumn
210
+ from .sql.expression import text as text
211
+ from .sql.expression import TextAsFrom as TextAsFrom
212
+ from .sql.expression import TextClause as TextClause
213
+ from .sql.expression import TextualSelect as TextualSelect
214
+ from .sql.expression import true as true
215
+ from .sql.expression import True_ as True_
216
+ from .sql.expression import try_cast as try_cast
217
+ from .sql.expression import TryCast as TryCast
218
+ from .sql.expression import TString as TString
219
+ from .sql.expression import tstring as tstring
220
+ from .sql.expression import Tuple as Tuple
221
+ from .sql.expression import tuple_ as tuple_
222
+ from .sql.expression import type_coerce as type_coerce
223
+ from .sql.expression import TypeClause as TypeClause
224
+ from .sql.expression import TypeCoerce as TypeCoerce
225
+ from .sql.expression import UnaryExpression as UnaryExpression
226
+ from .sql.expression import union as union
227
+ from .sql.expression import union_all as union_all
228
+ from .sql.expression import Update as Update
229
+ from .sql.expression import update as update
230
+ from .sql.expression import UpdateBase as UpdateBase
231
+ from .sql.expression import Values as Values
232
+ from .sql.expression import values as values
233
+ from .sql.expression import ValuesBase as ValuesBase
234
+ from .sql.expression import Visitable as Visitable
235
+ from .sql.expression import within_group as within_group
236
+ from .sql.expression import WithinGroup as WithinGroup
237
+ from .types import ARRAY as ARRAY
238
+ from .types import BIGINT as BIGINT
239
+ from .types import BigInteger as BigInteger
240
+ from .types import BINARY as BINARY
241
+ from .types import BLOB as BLOB
242
+ from .types import BOOLEAN as BOOLEAN
243
+ from .types import Boolean as Boolean
244
+ from .types import CHAR as CHAR
245
+ from .types import CLOB as CLOB
246
+ from .types import DATE as DATE
247
+ from .types import Date as Date
248
+ from .types import DATETIME as DATETIME
249
+ from .types import DateTime as DateTime
250
+ from .types import DECIMAL as DECIMAL
251
+ from .types import DOUBLE as DOUBLE
252
+ from .types import Double as Double
253
+ from .types import DOUBLE_PRECISION as DOUBLE_PRECISION
254
+ from .types import Enum as Enum
255
+ from .types import FLOAT as FLOAT
256
+ from .types import Float as Float
257
+ from .types import INT as INT
258
+ from .types import INTEGER as INTEGER
259
+ from .types import Integer as Integer
260
+ from .types import Interval as Interval
261
+ from .types import JSON as JSON
262
+ from .types import LargeBinary as LargeBinary
263
+ from .types import NCHAR as NCHAR
264
+ from .types import NUMERIC as NUMERIC
265
+ from .types import Numeric as Numeric
266
+ from .types import NumericCommon as NumericCommon
267
+ from .types import NVARCHAR as NVARCHAR
268
+ from .types import PickleType as PickleType
269
+ from .types import REAL as REAL
270
+ from .types import SMALLINT as SMALLINT
271
+ from .types import SmallInteger as SmallInteger
272
+ from .types import String as String
273
+ from .types import TEXT as TEXT
274
+ from .types import Text as Text
275
+ from .types import TIME as TIME
276
+ from .types import Time as Time
277
+ from .types import TIMESTAMP as TIMESTAMP
278
+ from .types import TupleType as TupleType
279
+ from .types import TypeDecorator as TypeDecorator
280
+ from .types import Unicode as Unicode
281
+ from .types import UnicodeText as UnicodeText
282
+ from .types import UUID as UUID
283
+ from .types import Uuid as Uuid
284
+ from .types import VARBINARY as VARBINARY
285
+ from .types import VARCHAR as VARCHAR
286
+
287
+ __version__ = "2.1.0b2"
288
+
289
+
290
+ def __go(lcls: Any) -> None:
291
+ _util.preloaded.import_prefix("sqlalchemy")
292
+
293
+ from . import exc
294
+
295
+ exc._version_token = "".join(__version__.split(".")[0:2])
296
+
297
+
298
+ __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,171 @@
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 .pyodbc import PyODBCConnector
17
+ from ..connectors.asyncio import AsyncAdapt_dbapi_module
18
+ from ..util.concurrency import await_
19
+
20
+ if TYPE_CHECKING:
21
+ from ..engine.interfaces import ConnectArgsType
22
+ from ..engine.url import URL
23
+
24
+
25
+ class AsyncAdapt_aioodbc_cursor(AsyncAdapt_dbapi_cursor):
26
+ __slots__ = ()
27
+
28
+ def setinputsizes(self, *inputsizes):
29
+ # see https://github.com/aio-libs/aioodbc/issues/451
30
+ return self._cursor._impl.setinputsizes(*inputsizes)
31
+
32
+ # how it's supposed to work
33
+ # return await_(self._cursor.setinputsizes(*inputsizes))
34
+
35
+ @property
36
+ def fast_executemany(self):
37
+ return self._cursor._impl.fast_executemany
38
+
39
+ @fast_executemany.setter
40
+ def fast_executemany(self, value):
41
+ self._cursor._impl.fast_executemany = value
42
+
43
+
44
+ class AsyncAdapt_aioodbc_ss_cursor(
45
+ AsyncAdapt_aioodbc_cursor, AsyncAdapt_dbapi_ss_cursor
46
+ ):
47
+ __slots__ = ()
48
+
49
+
50
+ class AsyncAdapt_aioodbc_connection(AsyncAdapt_dbapi_connection):
51
+ _cursor_cls = AsyncAdapt_aioodbc_cursor
52
+ _ss_cursor_cls = AsyncAdapt_aioodbc_ss_cursor
53
+ __slots__ = ()
54
+
55
+ @property
56
+ def autocommit(self):
57
+ return self._connection.autocommit
58
+
59
+ @autocommit.setter
60
+ def autocommit(self, value):
61
+ # https://github.com/aio-libs/aioodbc/issues/448
62
+ # self._connection.autocommit = value
63
+
64
+ self._connection._conn.autocommit = value
65
+
66
+ def ping(self, reconnect):
67
+ return await_(self._connection.ping(reconnect))
68
+
69
+ def add_output_converter(self, *arg, **kw):
70
+ self._connection.add_output_converter(*arg, **kw)
71
+
72
+ def character_set_name(self):
73
+ return self._connection.character_set_name()
74
+
75
+ def cursor(self, server_side=False):
76
+ # aioodbc sets connection=None when closed and just fails with
77
+ # AttributeError here. Here we use the same ProgrammingError +
78
+ # message that pyodbc uses, so it triggers is_disconnect() as well.
79
+ if self._connection.closed:
80
+ raise self.dbapi.ProgrammingError(
81
+ "Attempt to use a closed connection."
82
+ )
83
+ return super().cursor(server_side=server_side)
84
+
85
+ def rollback(self):
86
+ # aioodbc sets connection=None when closed and just fails with
87
+ # AttributeError here. should be a no-op
88
+ if not self._connection.closed:
89
+ super().rollback()
90
+
91
+ def commit(self):
92
+ # aioodbc sets connection=None when closed and just fails with
93
+ # AttributeError here. should be a no-op
94
+ if not self._connection.closed:
95
+ super().commit()
96
+
97
+ def close(self):
98
+ # aioodbc sets connection=None when closed and just fails with
99
+ # AttributeError here. should be a no-op
100
+ if not self._connection.closed:
101
+ super().close()
102
+
103
+
104
+ class AsyncAdapt_aioodbc_dbapi(AsyncAdapt_dbapi_module):
105
+ def __init__(self, aioodbc, pyodbc):
106
+ super().__init__(aioodbc, dbapi_module=pyodbc)
107
+ self.aioodbc = aioodbc
108
+ self.pyodbc = pyodbc
109
+ self.paramstyle = pyodbc.paramstyle
110
+ self._init_dbapi_attributes()
111
+ self.Cursor = AsyncAdapt_dbapi_cursor
112
+ self.version = pyodbc.version
113
+
114
+ def _init_dbapi_attributes(self):
115
+ for name in (
116
+ "Warning",
117
+ "Error",
118
+ "InterfaceError",
119
+ "DataError",
120
+ "DatabaseError",
121
+ "OperationalError",
122
+ "InterfaceError",
123
+ "IntegrityError",
124
+ "ProgrammingError",
125
+ "InternalError",
126
+ "NotSupportedError",
127
+ "SQL_DRIVER_NAME",
128
+ "NUMBER",
129
+ "STRING",
130
+ "DATETIME",
131
+ "BINARY",
132
+ "Binary",
133
+ "BinaryNull",
134
+ "SQL_VARCHAR",
135
+ "SQL_WVARCHAR",
136
+ "SQL_DECIMAL",
137
+ ):
138
+ setattr(self, name, getattr(self.pyodbc, name))
139
+
140
+ def connect(self, *arg, **kw):
141
+ creator_fn = kw.pop("async_creator_fn", self.aioodbc.connect)
142
+
143
+ return await_(
144
+ AsyncAdapt_aioodbc_connection.create(
145
+ self,
146
+ creator_fn(*arg, **kw),
147
+ )
148
+ )
149
+
150
+
151
+ class aiodbcConnector(PyODBCConnector):
152
+ is_async = True
153
+ supports_statement_cache = True
154
+
155
+ supports_server_side_cursors = True
156
+
157
+ @classmethod
158
+ def import_dbapi(cls):
159
+ return AsyncAdapt_aioodbc_dbapi(
160
+ __import__("aioodbc"), __import__("pyodbc")
161
+ )
162
+
163
+ def create_connect_args(self, url: URL) -> ConnectArgsType:
164
+ arg, kw = super().create_connect_args(url)
165
+ if arg and arg[0]:
166
+ kw["dsn"] = arg[0]
167
+
168
+ return (), kw
169
+
170
+ def get_driver_connection(self, connection):
171
+ return connection._connection