A app/config.py => app/config.py +20 -0
@@ 0,0 1,20 @@
+from functools import lru_cache
+
+from pydantic import BaseSettings, EmailStr
+
+
+class Settings(BaseSettings):
+ app_name: str = "fastapi-sandbox"
+ admin_email: EmailStr | None
+ database_url: str = "sqlite:///db.sqlite3"
+
+ class Config:
+ env_file = ".env"
+
+
+@lru_cache()
+def get_settings():
+ return Settings()
+
+
+settings = get_settings()
M app/database.py => app/database.py +4 -5
@@ 1,12 1,11 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base, sessionmaker
-SQLALCHEMY_DATABASE_URL = "sqlite:///db.sqlite3"
-# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
+from .config import settings
-engine = create_engine(
- SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
-)
+CHECK_SAME_THREAD = False if settings.database_url.startswith("sqlite") else True
+
+engine = create_engine(settings.database_url, connect_args={"check_same_thread": CHECK_SAME_THREAD})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()