db engine
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
DATABASE_URL_DEFAULT = "sqlite:///finanz.db"
|
||||||
@@ -8,3 +8,6 @@ wheels/
|
|||||||
|
|
||||||
# Virtual environments
|
# Virtual environments
|
||||||
.venv
|
.venv
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
.env
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/python
|
||||||
|
|
||||||
|
import os
|
||||||
|
from collections.abc import Generator
|
||||||
|
from contextlib import contextmanager
|
||||||
|
|
||||||
|
from sqlalchemy import Engine, create_engine
|
||||||
|
from sqlalchemy.orm import Session, sessionmaker
|
||||||
|
|
||||||
|
DATABASE_URL_DEFAULT = "sqlite:///finanz.db"
|
||||||
|
|
||||||
|
|
||||||
|
def get_engine() -> Engine:
|
||||||
|
url = os.environ.get("DATABASE_URL", DATABASE_URL_DEFAULT)
|
||||||
|
return create_engine(url)
|
||||||
|
|
||||||
|
|
||||||
|
def get_sessionmaker(engine: Engine | None = None) -> sessionmaker[Session]:
|
||||||
|
engine = engine or get_engine()
|
||||||
|
return sessionmaker(bind=engine)
|
||||||
|
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def get_session(engine: Engine | None = None) -> Generator[Session]:
|
||||||
|
session_factory = get_sessionmaker(engine)
|
||||||
|
session = session_factory()
|
||||||
|
try:
|
||||||
|
yield session
|
||||||
|
except Exception:
|
||||||
|
session.rollback()
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
session.close()
|
||||||
Reference in New Issue
Block a user