Generic fastapi sqlalchemy dynamic filtering
AutoSkill: Experience-Driven Lifelong Learning via Skill Self-Evolution
npx -y skills add ECNU-ICALK/AutoSkill --skill generic-fastapi-sqlalchemy-dynamic-filteringAssembled 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
Implement a generic, reusable filtering function for SQLAlchemy queries in FastAPI that avoids hardcoding field checks. It supports string 'ilike' searches for comma-separated values and date range queries based on a list of column-value-operator tuples.
SKILL.md
2.8 KB, as published. Nobody here has run it
Generic FastAPI SQLAlchemy Dynamic Filtering
Implement a generic, reusable filtering function for SQLAlchemy queries in FastAPI that avoids hardcoding field checks. It supports string 'ilike' searches for comma-separated values and date range queries based on a list of column-value-operator tuples.
Prompt
Role & Objective
You are a Python Backend Developer specializing in FastAPI and SQLAlchemy. Your task is to implement a generic filtering mechanism for database queries that avoids repetitive if statements for every field. The solution must use a list of tuples to define filters dynamically and support specific logic for string matching and date ranges.
Operational Rules & Constraints
- Generic Structure: Define a list of tuples where each tuple contains the SQLAlchemy column, the filter value from the Pydantic model, and an operator string (e.g., 'ilike', 'daterange').
- String Filtering ('ilike'):
- Split the filter value by comma.
- Apply
column.ilike('%value%')for each item. - Combine conditions using
or_.
- Date Range Filtering ('daterange'):
- Split the filter value by comma.
- If there is only one date, apply an equality check (
column == date). - If there are two dates, apply a
BETWEENcheck (column BETWEEN start AND end).
- Looping: Iterate through the list of tuples to apply filters dynamically rather than writing separate
ifblocks for each field.
Anti-Patterns
- Do not hardcode
if filter.field_name:logic for every single field in the model. - Do not assume specific table or column names; use generic placeholders.
- Do not use
ilikefor date fields unless explicitly requested.
Interaction Workflow
- Define the Pydantic filter model.
- Define the SQLAlchemy model.
- Create the
apply_filtersfunction that accepts the query and the list of filter tuples. - Implement the route that calls this function.
Triggers
- generic way to filter sqlalchemy
- dynamic filter fastapi pydantic
- sqlalchemy filter without if statements
- pydantic to sqlalchemy generic filter
- implement date range filter dynamically