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.
- sqlalchemy/__init__.py +298 -0
- sqlalchemy/connectors/__init__.py +18 -0
- sqlalchemy/connectors/aioodbc.py +171 -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 +89 -0
- sqlalchemy/dialects/mssql/aioodbc.py +63 -0
- sqlalchemy/dialects/mssql/base.py +4166 -0
- sqlalchemy/dialects/mssql/information_schema.py +285 -0
- sqlalchemy/dialects/mssql/json.py +140 -0
- sqlalchemy/dialects/mssql/mssqlpython.py +220 -0
- sqlalchemy/dialects/mssql/provision.py +196 -0
- sqlalchemy/dialects/mssql/pymssql.py +126 -0
- sqlalchemy/dialects/mssql/pyodbc.py +698 -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 +3877 -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 +92 -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 +153 -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 +85 -0
- sqlalchemy/dialects/oracle/base.py +3977 -0
- sqlalchemy/dialects/oracle/cx_oracle.py +1601 -0
- sqlalchemy/dialects/oracle/dictionary.py +507 -0
- sqlalchemy/dialects/oracle/json.py +158 -0
- sqlalchemy/dialects/oracle/oracledb.py +909 -0
- sqlalchemy/dialects/oracle/provision.py +288 -0
- sqlalchemy/dialects/oracle/types.py +367 -0
- sqlalchemy/dialects/oracle/vector.py +368 -0
- sqlalchemy/dialects/postgresql/__init__.py +171 -0
- sqlalchemy/dialects/postgresql/_psycopg_common.py +229 -0
- sqlalchemy/dialects/postgresql/array.py +534 -0
- sqlalchemy/dialects/postgresql/asyncpg.py +1323 -0
- sqlalchemy/dialects/postgresql/base.py +5789 -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 +423 -0
- sqlalchemy/dialects/postgresql/json.py +408 -0
- sqlalchemy/dialects/postgresql/named_types.py +521 -0
- sqlalchemy/dialects/postgresql/operators.py +130 -0
- sqlalchemy/dialects/postgresql/pg8000.py +670 -0
- sqlalchemy/dialects/postgresql/pg_catalog.py +344 -0
- sqlalchemy/dialects/postgresql/provision.py +184 -0
- sqlalchemy/dialects/postgresql/psycopg.py +799 -0
- sqlalchemy/dialects/postgresql/psycopg2.py +860 -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 +3063 -0
- sqlalchemy/dialects/sqlite/dml.py +279 -0
- sqlalchemy/dialects/sqlite/json.py +100 -0
- sqlalchemy/dialects/sqlite/provision.py +229 -0
- sqlalchemy/dialects/sqlite/pysqlcipher.py +161 -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.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/engine/_processors_cy.py +92 -0
- sqlalchemy/engine/_result_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/engine/_result_cy.py +633 -0
- sqlalchemy/engine/_row_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/engine/_row_cy.py +232 -0
- sqlalchemy/engine/_util_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/engine/_util_cy.py +136 -0
- sqlalchemy/engine/base.py +3354 -0
- sqlalchemy/engine/characteristics.py +155 -0
- sqlalchemy/engine/create.py +877 -0
- sqlalchemy/engine/cursor.py +2421 -0
- sqlalchemy/engine/default.py +2402 -0
- sqlalchemy/engine/events.py +965 -0
- sqlalchemy/engine/interfaces.py +3495 -0
- sqlalchemy/engine/mock.py +134 -0
- sqlalchemy/engine/processors.py +82 -0
- sqlalchemy/engine/reflection.py +2100 -0
- sqlalchemy/engine/result.py +1966 -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 +1487 -0
- sqlalchemy/ext/asyncio/exc.py +21 -0
- sqlalchemy/ext/asyncio/result.py +994 -0
- sqlalchemy/ext/asyncio/scoping.py +1679 -0
- sqlalchemy/ext/asyncio/session.py +2007 -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 +176 -0
- sqlalchemy/orm/_orm_constructors.py +2694 -0
- sqlalchemy/orm/_typing.py +179 -0
- sqlalchemy/orm/attributes.py +2868 -0
- sqlalchemy/orm/base.py +976 -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 +2280 -0
- sqlalchemy/orm/decl_base.py +2309 -0
- sqlalchemy/orm/dependency.py +1306 -0
- sqlalchemy/orm/descriptor_props.py +1183 -0
- sqlalchemy/orm/dynamic.py +307 -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 +4411 -0
- sqlalchemy/orm/path_registry.py +829 -0
- sqlalchemy/orm/persistence.py +1789 -0
- sqlalchemy/orm/properties.py +973 -0
- sqlalchemy/orm/query.py +3528 -0
- sqlalchemy/orm/relationships.py +3570 -0
- sqlalchemy/orm/scoping.py +2232 -0
- sqlalchemy/orm/session.py +5403 -0
- sqlalchemy/orm/state.py +1175 -0
- sqlalchemy/orm/state_changes.py +196 -0
- sqlalchemy/orm/strategies.py +3492 -0
- sqlalchemy/orm/strategy_options.py +2562 -0
- sqlalchemy/orm/sync.py +164 -0
- sqlalchemy/orm/unitofwork.py +798 -0
- sqlalchemy/orm/util.py +2438 -0
- sqlalchemy/orm/writeonly.py +694 -0
- sqlalchemy/pool/__init__.py +41 -0
- sqlalchemy/pool/base.py +1522 -0
- sqlalchemy/pool/events.py +375 -0
- sqlalchemy/pool/impl.py +582 -0
- sqlalchemy/py.typed +0 -0
- sqlalchemy/schema.py +74 -0
- sqlalchemy/sql/__init__.py +156 -0
- sqlalchemy/sql/_annotated_cols.py +397 -0
- sqlalchemy/sql/_dml_constructors.py +132 -0
- sqlalchemy/sql/_elements_constructors.py +2164 -0
- sqlalchemy/sql/_orm_types.py +20 -0
- sqlalchemy/sql/_selectable_constructors.py +840 -0
- sqlalchemy/sql/_typing.py +487 -0
- sqlalchemy/sql/_util_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/sql/_util_cy.py +127 -0
- sqlalchemy/sql/annotation.py +590 -0
- sqlalchemy/sql/base.py +2699 -0
- sqlalchemy/sql/cache_key.py +1066 -0
- sqlalchemy/sql/coercions.py +1373 -0
- sqlalchemy/sql/compiler.py +8327 -0
- sqlalchemy/sql/crud.py +1815 -0
- sqlalchemy/sql/ddl.py +1928 -0
- sqlalchemy/sql/default_comparator.py +654 -0
- sqlalchemy/sql/dml.py +1977 -0
- sqlalchemy/sql/elements.py +6033 -0
- sqlalchemy/sql/events.py +458 -0
- sqlalchemy/sql/expression.py +172 -0
- sqlalchemy/sql/functions.py +2305 -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 +6703 -0
- sqlalchemy/sql/selectable.py +7553 -0
- sqlalchemy/sql/sqltypes.py +4093 -0
- sqlalchemy/sql/traversals.py +1042 -0
- sqlalchemy/sql/type_api.py +2446 -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 +483 -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 +384 -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 +613 -0
- sqlalchemy/testing/requirements.py +1978 -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 +2271 -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 +158 -0
- sqlalchemy/util/_collections.py +688 -0
- sqlalchemy/util/_collections_cy.cp313t-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.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/util/_immutabledict_cy.py +240 -0
- sqlalchemy/util/compat.py +299 -0
- sqlalchemy/util/concurrency.py +322 -0
- sqlalchemy/util/cython.py +79 -0
- sqlalchemy/util/deprecations.py +401 -0
- sqlalchemy/util/langhelpers.py +2320 -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.0b2.dist-info/METADATA +269 -0
- sqlalchemy-2.1.0b2.dist-info/RECORD +270 -0
- sqlalchemy-2.1.0b2.dist-info/WHEEL +5 -0
- sqlalchemy-2.1.0b2.dist-info/licenses/LICENSE +19 -0
- sqlalchemy-2.1.0b2.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# dialects/mysql/asyncmy.py
|
|
2
|
+
# Copyright (C) 2005-2026 the SQLAlchemy authors and contributors <see AUTHORS
|
|
3
|
+
# 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
|
+
r"""
|
|
9
|
+
.. dialect:: mysql+asyncmy
|
|
10
|
+
:name: asyncmy
|
|
11
|
+
:dbapi: asyncmy
|
|
12
|
+
:connectstring: mysql+asyncmy://user:password@host:port/dbname[?key=value&key=value...]
|
|
13
|
+
:url: https://github.com/long2ice/asyncmy
|
|
14
|
+
|
|
15
|
+
Using a special asyncio mediation layer, the asyncmy dialect is usable
|
|
16
|
+
as the backend for the :ref:`SQLAlchemy asyncio <asyncio_toplevel>`
|
|
17
|
+
extension package.
|
|
18
|
+
|
|
19
|
+
This dialect should normally be used only with the
|
|
20
|
+
:func:`_asyncio.create_async_engine` engine creation function::
|
|
21
|
+
|
|
22
|
+
from sqlalchemy.ext.asyncio import create_async_engine
|
|
23
|
+
|
|
24
|
+
engine = create_async_engine(
|
|
25
|
+
"mysql+asyncmy://user:pass@hostname/dbname?charset=utf8mb4"
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
""" # noqa
|
|
29
|
+
from __future__ import annotations
|
|
30
|
+
|
|
31
|
+
from types import ModuleType
|
|
32
|
+
from typing import Any
|
|
33
|
+
from typing import NoReturn
|
|
34
|
+
from typing import Optional
|
|
35
|
+
from typing import TYPE_CHECKING
|
|
36
|
+
from typing import Union
|
|
37
|
+
|
|
38
|
+
from .pymysql import MySQLDialect_pymysql
|
|
39
|
+
from ... import util
|
|
40
|
+
from ...connectors.asyncio import AsyncAdapt_dbapi_connection
|
|
41
|
+
from ...connectors.asyncio import AsyncAdapt_dbapi_cursor
|
|
42
|
+
from ...connectors.asyncio import AsyncAdapt_dbapi_module
|
|
43
|
+
from ...connectors.asyncio import AsyncAdapt_dbapi_ss_cursor
|
|
44
|
+
from ...connectors.asyncio import AsyncAdapt_terminate
|
|
45
|
+
from ...util.concurrency import await_
|
|
46
|
+
|
|
47
|
+
if TYPE_CHECKING:
|
|
48
|
+
|
|
49
|
+
from ...connectors.asyncio import AsyncIODBAPIConnection
|
|
50
|
+
from ...connectors.asyncio import AsyncIODBAPICursor
|
|
51
|
+
from ...engine.interfaces import ConnectArgsType
|
|
52
|
+
from ...engine.interfaces import DBAPIConnection
|
|
53
|
+
from ...engine.interfaces import DBAPICursor
|
|
54
|
+
from ...engine.interfaces import DBAPIModule
|
|
55
|
+
from ...engine.interfaces import PoolProxiedConnection
|
|
56
|
+
from ...engine.url import URL
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class AsyncAdapt_asyncmy_cursor(AsyncAdapt_dbapi_cursor):
|
|
60
|
+
__slots__ = ()
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class AsyncAdapt_asyncmy_ss_cursor(
|
|
64
|
+
AsyncAdapt_dbapi_ss_cursor, AsyncAdapt_asyncmy_cursor
|
|
65
|
+
):
|
|
66
|
+
__slots__ = ()
|
|
67
|
+
|
|
68
|
+
def _make_new_cursor(
|
|
69
|
+
self, connection: AsyncIODBAPIConnection
|
|
70
|
+
) -> AsyncIODBAPICursor:
|
|
71
|
+
return connection.cursor(
|
|
72
|
+
self._adapt_connection.dbapi.asyncmy.cursors.SSCursor
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class AsyncAdapt_asyncmy_connection(
|
|
77
|
+
AsyncAdapt_terminate, AsyncAdapt_dbapi_connection
|
|
78
|
+
):
|
|
79
|
+
__slots__ = ()
|
|
80
|
+
|
|
81
|
+
_cursor_cls = AsyncAdapt_asyncmy_cursor
|
|
82
|
+
_ss_cursor_cls = AsyncAdapt_asyncmy_ss_cursor
|
|
83
|
+
|
|
84
|
+
@classmethod
|
|
85
|
+
def _handle_exception_no_connection(
|
|
86
|
+
cls, dbapi: Any, error: Exception
|
|
87
|
+
) -> NoReturn:
|
|
88
|
+
if isinstance(error, AttributeError):
|
|
89
|
+
raise dbapi.InternalError(
|
|
90
|
+
"network operation failed due to asyncmy attribute error"
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
raise error
|
|
94
|
+
|
|
95
|
+
def ping(self, reconnect: bool) -> None:
|
|
96
|
+
assert not reconnect
|
|
97
|
+
return await_(self._do_ping())
|
|
98
|
+
|
|
99
|
+
async def _do_ping(self) -> None:
|
|
100
|
+
try:
|
|
101
|
+
async with self._execute_mutex:
|
|
102
|
+
await self._connection.ping(False)
|
|
103
|
+
except Exception as error:
|
|
104
|
+
self._handle_exception(error)
|
|
105
|
+
|
|
106
|
+
def character_set_name(self) -> Optional[str]:
|
|
107
|
+
return self._connection.character_set_name() # type: ignore[no-any-return] # noqa: E501
|
|
108
|
+
|
|
109
|
+
def autocommit(self, value: Any) -> None:
|
|
110
|
+
await_(self._connection.autocommit(value))
|
|
111
|
+
|
|
112
|
+
def get_autocommit(self) -> bool:
|
|
113
|
+
return self._connection.get_autocommit() # type: ignore
|
|
114
|
+
|
|
115
|
+
def close(self) -> None:
|
|
116
|
+
await_(self._connection.ensure_closed())
|
|
117
|
+
|
|
118
|
+
async def _terminate_graceful_close(self) -> None:
|
|
119
|
+
await self._connection.ensure_closed()
|
|
120
|
+
|
|
121
|
+
def _terminate_force_close(self) -> None:
|
|
122
|
+
# it's not awaitable.
|
|
123
|
+
self._connection.close()
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class AsyncAdapt_asyncmy_dbapi(AsyncAdapt_dbapi_module):
|
|
127
|
+
def __init__(self, asyncmy: ModuleType):
|
|
128
|
+
super().__init__(asyncmy)
|
|
129
|
+
self.asyncmy = asyncmy
|
|
130
|
+
self.paramstyle = "format"
|
|
131
|
+
self._init_dbapi_attributes()
|
|
132
|
+
|
|
133
|
+
def _init_dbapi_attributes(self) -> None:
|
|
134
|
+
for name in (
|
|
135
|
+
"Warning",
|
|
136
|
+
"Error",
|
|
137
|
+
"InterfaceError",
|
|
138
|
+
"DataError",
|
|
139
|
+
"DatabaseError",
|
|
140
|
+
"OperationalError",
|
|
141
|
+
"InterfaceError",
|
|
142
|
+
"IntegrityError",
|
|
143
|
+
"ProgrammingError",
|
|
144
|
+
"InternalError",
|
|
145
|
+
"NotSupportedError",
|
|
146
|
+
):
|
|
147
|
+
setattr(self, name, getattr(self.asyncmy.errors, name))
|
|
148
|
+
|
|
149
|
+
STRING = util.symbol("STRING")
|
|
150
|
+
NUMBER = util.symbol("NUMBER")
|
|
151
|
+
BINARY = util.symbol("BINARY")
|
|
152
|
+
DATETIME = util.symbol("DATETIME")
|
|
153
|
+
TIMESTAMP = util.symbol("TIMESTAMP")
|
|
154
|
+
Binary = staticmethod(bytes)
|
|
155
|
+
|
|
156
|
+
def connect(self, *arg: Any, **kw: Any) -> AsyncAdapt_asyncmy_connection:
|
|
157
|
+
creator_fn = kw.pop("async_creator_fn", self.asyncmy.connect)
|
|
158
|
+
|
|
159
|
+
return await_(
|
|
160
|
+
AsyncAdapt_asyncmy_connection.create(
|
|
161
|
+
self,
|
|
162
|
+
creator_fn(*arg, **kw),
|
|
163
|
+
)
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
class MySQLDialect_asyncmy(MySQLDialect_pymysql):
|
|
168
|
+
driver = "asyncmy"
|
|
169
|
+
supports_statement_cache = True
|
|
170
|
+
|
|
171
|
+
supports_server_side_cursors = True
|
|
172
|
+
_sscursor = AsyncAdapt_asyncmy_ss_cursor
|
|
173
|
+
|
|
174
|
+
is_async = True
|
|
175
|
+
has_terminate = True
|
|
176
|
+
|
|
177
|
+
@classmethod
|
|
178
|
+
def import_dbapi(cls) -> DBAPIModule:
|
|
179
|
+
return AsyncAdapt_asyncmy_dbapi(__import__("asyncmy"))
|
|
180
|
+
|
|
181
|
+
def do_terminate(self, dbapi_connection: DBAPIConnection) -> None:
|
|
182
|
+
dbapi_connection.terminate()
|
|
183
|
+
|
|
184
|
+
def create_connect_args(self, url: URL) -> ConnectArgsType: # type: ignore[override] # noqa: E501
|
|
185
|
+
return super().create_connect_args(
|
|
186
|
+
url, _translate_args=dict(username="user", database="db")
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
def is_disconnect(
|
|
190
|
+
self,
|
|
191
|
+
e: DBAPIModule.Error,
|
|
192
|
+
connection: Optional[Union[PoolProxiedConnection, DBAPIConnection]],
|
|
193
|
+
cursor: Optional[DBAPICursor],
|
|
194
|
+
) -> bool:
|
|
195
|
+
if super().is_disconnect(e, connection, cursor):
|
|
196
|
+
return True
|
|
197
|
+
else:
|
|
198
|
+
str_e = str(e).lower()
|
|
199
|
+
return (
|
|
200
|
+
"not connected" in str_e or "network operation failed" in str_e
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
def _found_rows_client_flag(self) -> int:
|
|
204
|
+
from asyncmy.constants import CLIENT # type: ignore
|
|
205
|
+
|
|
206
|
+
return CLIENT.FOUND_ROWS # type: ignore[no-any-return]
|
|
207
|
+
|
|
208
|
+
def get_driver_connection(
|
|
209
|
+
self, connection: DBAPIConnection
|
|
210
|
+
) -> AsyncIODBAPIConnection:
|
|
211
|
+
return connection._connection # type: ignore[no-any-return]
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
dialect = MySQLDialect_asyncmy
|