Reuse the sqlalchemy engine once it's created

This commit is contained in:
Masen Furer 2024-12-05 21:51:11 -08:00
parent 3f4dca21a8
commit 264aade3bc
No known key found for this signature in database
GPG Key ID: B0008AD22B3B3A95

View File

@ -21,6 +21,8 @@ from reflex.config import environment, get_config
from reflex.utils import console
from reflex.utils.compat import sqlmodel, sqlmodel_field_has_primary_key
_ENGINE: sqlalchemy.engine.Engine | None = None
def get_engine(url: str | None = None) -> sqlalchemy.engine.Engine:
"""Get the database engine.
@ -34,6 +36,10 @@ def get_engine(url: str | None = None) -> sqlalchemy.engine.Engine:
Raises:
ValueError: If the database url is None.
"""
global _ENGINE
if _ENGINE is not None:
return _ENGINE
conf = get_config()
url = url or conf.db_url
if url is None:
@ -46,7 +52,9 @@ def get_engine(url: str | None = None) -> sqlalchemy.engine.Engine:
echo_db_query = environment.SQLALCHEMY_ECHO.get()
# Needed for the admin dash on sqlite.
connect_args = {"check_same_thread": False} if url.startswith("sqlite") else {}
return sqlmodel.create_engine(url, echo=echo_db_query, connect_args=connect_args)
_ENGINE = sqlmodel.create_engine(url, echo=echo_db_query, connect_args=connect_args)
return _ENGINE
async def get_db_status() -> bool: