db engine
This commit is contained in:
@@ -0,0 +1 @@
|
||||
DATABASE_URL_DEFAULT = "sqlite:///finanz.db"
|
||||
@@ -8,3 +8,6 @@ wheels/
|
||||
|
||||
# Virtual environments
|
||||
.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