diff options
| author | YongJieYongJie <KhooYongJie@gmx.com> | 2021-04-28 13:30:09 -0400 |
|---|---|---|
| committer | Federico Caselli <cfederico87@gmail.com> | 2021-04-28 20:52:34 +0200 |
| commit | 1ee6332ba261cc1b6bbc8f427d17f81614b07d9b (patch) | |
| tree | 3bdb6554999b6e7275b27734d73b30e9323b337b | |
| parent | 7fdaac7b2910b5612420378519b9f60d4649daff (diff) | |
| download | sqlalchemy-1ee6332ba261cc1b6bbc8f427d17f81614b07d9b.tar.gz | |
Use SingletonThreadPool for in-memory SQLite
database created using filename uri
Default to using ``SingletonThreadPool`` for in-memory SQLite databases
created using URI filenames. Previously the default pool used was the
``NullPool`` that precented sharing the same database between multiple
engines.
Fixes: #6379
Closes: #6380
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/6380
Pull-request-sha: 3b8024417a3a54c8269d43e40801aa4e58593540
Change-Id: Ice09622796455e796ede7711c98f3ceec13aa949
| -rw-r--r-- | doc/build/changelog/unreleased_14/6379.rst | 8 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/sqlite/pysqlite.py | 4 | ||||
| -rw-r--r-- | test/dialect/test_sqlite.py | 5 |
3 files changed, 16 insertions, 1 deletions
diff --git a/doc/build/changelog/unreleased_14/6379.rst b/doc/build/changelog/unreleased_14/6379.rst new file mode 100644 index 000000000..9ea82bcea --- /dev/null +++ b/doc/build/changelog/unreleased_14/6379.rst @@ -0,0 +1,8 @@ +.. change:: + :tags: usecase, sqlite + :tickets: 6379 + + Default to using ``SingletonThreadPool`` for in-memory SQLite databases + created using URI filenames. Previously the default pool used was the + ``NullPool`` that precented sharing the same database between multiple + engines. diff --git a/lib/sqlalchemy/dialects/sqlite/pysqlite.py b/lib/sqlalchemy/dialects/sqlite/pysqlite.py index 0b091e73b..20a4bb7ac 100644 --- a/lib/sqlalchemy/dialects/sqlite/pysqlite.py +++ b/lib/sqlalchemy/dialects/sqlite/pysqlite.py @@ -474,7 +474,9 @@ class SQLiteDialect_pysqlite(SQLiteDialect): @classmethod def _is_url_file_db(cls, url): - if url.database and url.database != ":memory:": + if (url.database and url.database != ":memory:") and ( + url.query.get("mode", None) != "memory" + ): return True else: return False diff --git a/test/dialect/test_sqlite.py b/test/dialect/test_sqlite.py index 7fd7ac333..bae97bb9a 100644 --- a/test/dialect/test_sqlite.py +++ b/test/dialect/test_sqlite.py @@ -710,6 +710,11 @@ class DialectTest( e = create_engine("sqlite+pysqlite:///:memory:") assert e.pool.__class__ is pool.SingletonThreadPool + e = create_engine( + "sqlite+pysqlite:///file:foo.db?mode=memory&uri=true" + ) + assert e.pool.__class__ is pool.SingletonThreadPool + e = create_engine("sqlite+pysqlite:///foo.db") assert e.pool.__class__ is pool.NullPool |
