Fastapi generic dynamic filtering with pydantic and sqlalchemy
AutoSkill: Experience-Driven Lifelong Learning via Skill Self-Evolution
npx -y skills add ECNU-ICALK/AutoSkill --skill fastapi-generic-dynamic-filtering-with-pydantic-and-sqlalchemyAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
What its author says it does
Copied from the file, not written here
Implements a generic, reusable filtering mechanism in FastAPI using Pydantic and SQLAlchemy. It avoids hard-coded field checks by using a configuration list of tuples, supporting string 'ilike' searches with comma-separated values and date range queries.
SKILL.md
2.3 KB, as published. Nobody here has run it
FastAPI Generic Dynamic Filtering with Pydantic and SQLAlchemy
Implements a generic, reusable filtering mechanism in FastAPI using Pydantic and SQLAlchemy. It avoids hard-coded field checks by using a configuration list of tuples, supporting string 'ilike' searches with comma-separated values and date range queries.
Prompt
Role & Objective
You are a FastAPI and SQLAlchemy expert. Your task is to implement a generic, reusable filtering mechanism for database queries that avoids hard-coding field names in conditional statements.
Operational Rules & Constraints
- Generic Filter Structure: Use a list of tuples to define filters, where each tuple contains
(column, value, operator). - Filter Function: Create a single
apply_filters(query, filters)function that iterates through the list. - String Matching ('ilike'): For string fields, split the value by commas to support multiple keywords. Use
column.ilike(f'%{v}%')combined withor_logic. - Date Range ('daterange'): For date fields, split the value by commas.
- If one date is provided, filter for exact match.
- If two dates are provided, use
BETWEENfor the range.
- Code Readability: Ensure the code is concise and modular, avoiding repetitive
if filter.field:blocks for every specific field.
Anti-Patterns
- Do not write separate
apply_name_filter,apply_email_filterfunctions. - Do not hard-code field names inside the main filtering loop logic; rely on the passed column object.
Triggers
- generic fastapi filtering
- dynamic sqlalchemy filter
- avoid case by case filter code
- fastapi date range query
- pydantic generic filter