from typing import List, Optional from sqlalchemy import or_ from sqlalchemy.sql import Select def apply_keyword_search_stmt( stmt: Select, model, keyword: Optional[str], fields: List[str], ) -> Select: """ Async / SQLAlchemy 2.0 Select 版本的关键字搜索 """ if not keyword: return stmt like = f"%{keyword}%" conditions = [ getattr(model, field).ilike(like) for field in fields if hasattr(model, field) ] if not conditions: return stmt return stmt.where(or_(*conditions))