| from sqlalchemy import create_engine |
| from sqlalchemy.orm import declarative_base, sessionmaker |
|
|
| from .config import get_settings |
|
|
|
|
| settings = get_settings() |
| Base = declarative_base() |
|
|
| connect_args = {"check_same_thread": False} if settings.is_sqlite else {} |
| engine = create_engine(settings.database_url, future=True, connect_args=connect_args) |
| SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, expire_on_commit=False) |
|
|
|
|
| def init_db() -> None: |
| if settings.sqlite_directory is not None: |
| settings.sqlite_directory.mkdir(parents=True, exist_ok=True) |
|
|
| from . import models |
|
|
| Base.metadata.create_all(bind=engine) |
|
|
|
|
| def get_session(): |
| session = SessionLocal() |
| try: |
| yield session |
| finally: |
| session.close() |
|
|
|
|