From: YongJieYongJie Date: Wed, 28 Apr 2021 00:50:07 +0000 (+0800) Subject: Use SingletonThreadPool for in-memory SQLite database X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F6380%2Fhead;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Use SingletonThreadPool for in-memory SQLite database Fix bug where NullPool is used for in-memory SQLite created using filename uri instead of ":memory:". Checks for in-memory SQLite database created using filename uri like "file:foo.db?mode=memory&uri=true" in addition to in-memory SQLite database created using the standard ":memory:". Fixes: #6379 --- diff --git a/lib/sqlalchemy/dialects/sqlite/pysqlite.py b/lib/sqlalchemy/dialects/sqlite/pysqlite.py index 0b091e73b6..20a4bb7acb 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 7fd7ac333c..bae97bb9a2 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