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
--- /dev/null
+.. 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.
@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
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