search.py 577 B

1234567891011121314151617181920212223242526272829
  1. from typing import List, Optional
  2. from sqlalchemy import or_
  3. from sqlalchemy.sql import Select
  4. def apply_keyword_search_stmt(
  5. stmt: Select,
  6. model,
  7. keyword: Optional[str],
  8. fields: List[str],
  9. ) -> Select:
  10. """
  11. Async / SQLAlchemy 2.0 Select 版本的关键字搜索
  12. """
  13. if not keyword:
  14. return stmt
  15. like = f"%{keyword}%"
  16. conditions = [
  17. getattr(model, field).ilike(like)
  18. for field in fields
  19. if hasattr(model, field)
  20. ]
  21. if not conditions:
  22. return stmt
  23. return stmt.where(or_(*conditions))