from __future__ import annotations import json from app.config import settings from pydantic import BaseModel from sqlalchemy.ext.asyncio import create_async_engine from sqlmodel import SQLModel from sqlmodel.ext.asyncio.session import AsyncSession try: import redis except ImportError: redis = None def json_serializer(value): if isinstance(value, BaseModel | SQLModel): return value.model_dump_json() return json.dumps(value) # 数据库引擎 engine = create_async_engine(settings.DATABASE_URL, json_serializer=json_serializer) # Redis 连接 if redis: redis_client = redis.from_url(settings.REDIS_URL, decode_responses=True) else: redis_client = None # 数据库依赖 async def get_db(): async with AsyncSession(engine) as session: yield session async def create_tables(): async with engine.begin() as conn: await conn.run_sync(SQLModel.metadata.create_all) # Redis 依赖 def get_redis(): return redis_client