Spaces:
Build error
Build error
File size: 1,657 Bytes
b34e73d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | """
AlgoPharma β SQLAlchemy 2.0 database engine and session factory.
Synchronous engine, SQLite, check_same_thread=False.
"""
import sys
from sqlalchemy import create_engine, event
from sqlalchemy.orm import sessionmaker, Session
from config import get_settings
_settings = get_settings()
engine = create_engine(
_settings.DATABASE_URL,
connect_args={"check_same_thread": False} if "sqlite" in _settings.DATABASE_URL else {},
echo=False,
)
# Enable WAL mode for better concurrency with SQLite
@event.listens_for(engine, "connect")
def _set_sqlite_pragma(dbapi_conn, _connection_record):
if "sqlite" in _settings.DATABASE_URL:
cursor = dbapi_conn.cursor()
cursor.execute("PRAGMA journal_mode=WAL;")
cursor.close()
SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False)
def get_db() -> Session:
"""FastAPI dependency β yields a DB session per request."""
db = SessionLocal()
try:
yield db
finally:
db.close()
def init_db():
"""Create all tables from models.py Base metadata."""
from models import Base
Base.metadata.create_all(bind=engine)
# ββ Self-test βββββββββββββββββββββββββββββββββββββββββββββ
if __name__ == "__main__":
if sys.stdout.encoding.lower() != "utf-8":
sys.stdout.reconfigure(encoding="utf-8")
init_db()
with SessionLocal() as session:
result = session.execute(__import__("sqlalchemy").text("SELECT 1"))
assert result.scalar() == 1
print("β
Database engine OK β tables created")
|