from typing import List, Literal from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models import KolVideo from app.config import settings async def query_videos( session: AsyncSession, query_type: Literal["star_id", "unique_id", "nickname"], values: List[str], ) -> List[KolVideo]: """ 查询 KOL 视频数据. Args: session: 数据库会话 query_type: 查询类型 (star_id, unique_id, nickname) values: 查询值列表 Returns: 匹配的视频列表 """ stmt = select(KolVideo) if query_type == "star_id": # 精准匹配 star_id stmt = stmt.where(KolVideo.star_id.in_(values)) elif query_type == "unique_id": # 精准匹配 star_unique_id stmt = stmt.where(KolVideo.star_unique_id.in_(values)) elif query_type == "nickname": # 模糊匹配 star_nickname (使用第一个值) if values: stmt = stmt.where(KolVideo.star_nickname.like(f"%{values[0]}%")) # 限制返回数量 stmt = stmt.limit(settings.MAX_QUERY_LIMIT) result = await session.execute(stmt) return list(result.scalars().all())