summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/exc.py2
-rw-r--r--lib/sqlalchemy/ext/asyncio/engine.py5
-rw-r--r--test/ext/asyncio/test_engine_py3k.py12
3 files changed, 17 insertions, 2 deletions
diff --git a/lib/sqlalchemy/exc.py b/lib/sqlalchemy/exc.py
index 289b8dfab..a0a86826d 100644
--- a/lib/sqlalchemy/exc.py
+++ b/lib/sqlalchemy/exc.py
@@ -287,7 +287,7 @@ class NoReferenceError(InvalidRequestError):
class AwaitRequired(InvalidRequestError):
"""Error raised by the async greenlet spawn if no async operation
- was awaited when it required one
+ was awaited when it required one.
"""
diff --git a/lib/sqlalchemy/ext/asyncio/engine.py b/lib/sqlalchemy/ext/asyncio/engine.py
index aa7e60dfb..db95ab371 100644
--- a/lib/sqlalchemy/ext/asyncio/engine.py
+++ b/lib/sqlalchemy/ext/asyncio/engine.py
@@ -527,6 +527,11 @@ class AsyncEngine(ProxyComparable, AsyncConnectable):
await self.conn.close()
def __init__(self, sync_engine: Engine):
+ if not sync_engine.dialect.is_async:
+ raise exc.InvalidRequestError(
+ "The asyncio extension requires an async driver to be used. "
+ f"The loaded {sync_engine.dialect.driver!r} is not async."
+ )
self.sync_engine = self._proxied = sync_engine
def begin(self):
diff --git a/test/ext/asyncio/test_engine_py3k.py b/test/ext/asyncio/test_engine_py3k.py
index 72d866882..512f0447f 100644
--- a/test/ext/asyncio/test_engine_py3k.py
+++ b/test/ext/asyncio/test_engine_py3k.py
@@ -1,6 +1,7 @@
import asyncio
from sqlalchemy import Column
+from sqlalchemy import create_engine
from sqlalchemy import delete
from sqlalchemy import event
from sqlalchemy import exc
@@ -662,9 +663,18 @@ class AsyncResultTest(EngineFixture):
class TextSyncDBAPI(fixtures.TestBase):
+ def test_sync_dbapi_raises(self):
+ with expect_raises_message(
+ exc.InvalidRequestError,
+ "The asyncio extension requires an async driver to be used.",
+ ):
+ create_async_engine("sqlite:///:memory:")
+
@testing.fixture
def async_engine(self):
- return create_async_engine("sqlite:///:memory:")
+ engine = create_engine("sqlite:///:memory:", future=True)
+ engine.dialect.is_async = True
+ return _async_engine.AsyncEngine(engine)
@async_test
@combinations(