Skip to content

Commit 7d57d7a

Browse files
authored
Merge pull request #14 from tomer322/fixture/tomer322/sqlite_support
added a workaround to support sqlite
2 parents d5c9e72 + 0d02fbc commit 7d57d7a

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

asyncalchemy/__init__.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from __future__ import absolute_import
22

3+
from asyncio import get_event_loop
4+
from concurrent.futures import ThreadPoolExecutor
35
from typing import Any, Dict, Callable, Optional
46

57
from sqlalchemy import create_engine
@@ -14,6 +16,8 @@
1416
# therefore the "..." convention is used.
1517
SessionFactoryType = Callable[..., SessionCommitter]
1618

19+
SQLITE_DRIVER_NAME = 'pysqlite'
20+
1721

1822
def create_session_factory_from_engine(engine: Engine) -> SessionFactoryType:
1923
"""
@@ -24,6 +28,13 @@ def create_session_factory_from_engine(engine: Engine) -> SessionFactoryType:
2428
"""
2529
session_maker = sessionmaker(bind=engine)
2630

31+
# SQLite workaround: SQLite objects cannot be shared between threads
32+
if engine.driver == SQLITE_DRIVER_NAME:
33+
print('WARNING: Sqlite backend detected. Using single threaded executor '
34+
'- DO NOT USE IN PRODUCTION!')
35+
executor = ThreadPoolExecutor(max_workers=1)
36+
get_event_loop().set_default_executor(executor)
37+
2738
def factory(reuse_session: Optional[Session] = None) -> SessionCommitter:
2839
"""
2940
Create a session.

0 commit comments

Comments
 (0)