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