Skip to main content

SQL profiler middleware for FastAPI

Project description

FastAPI-Silk

Lightweight SQL profiling middleware for FastAPI + SQLAlchemy
Track query count, database time, and total request time per request.

PyPI Downloads CI Python License

Installation | Quick Start | How It Works | Development

Why FastAPI-Silk

Capability Details
SQL instrumentation setup_sql_profiler(engine) hooks into SQLAlchemy engine events (before_cursor_execute / after_cursor_execute) so SQL executed through that engine is captured per request.
Request-level metrics Adds X-DB-Queries, X-DB-Time, and X-Total-Time response headers.
Slow query visibility Logs queries slower than 0.1s to stdout for quick diagnostics.
Context isolation Uses contextvars for per-request query storage.
Minimal setup One profiler setup call + one middleware registration.

Installation

pip install fastapi-silk

PyPI: https://pypi.org/project/fastapi-silk/

Quick Start

from fastapi import FastAPI
from sqlalchemy import create_engine, text

from fastapi_silk import SQLDebugMiddleware, setup_sql_profiler, silk_router

app = FastAPI()
engine = create_engine("sqlite:///./app.db")

# Profiles SQL that goes through this engine
setup_sql_profiler(engine)
app.add_middleware(SQLDebugMiddleware)

# For the UI use
app.include_router(silk_router)

@app.get("/health")
def health() -> dict[str, bool]:
    with engine.connect() as conn:
        conn.execute(text("SELECT 1"))
    return {"ok": True}

Example response headers:

X-DB-Queries: 1
X-DB-Time: 0.0012s
X-Total-Time: 0.0049s

Docs

  • Use /_silk link to move for docs where you can find all profiling requests with detailed data

How It Works

flowchart TD
  A[Incoming request] --> B[SQLDebugMiddleware starts request timer]
  B --> C[Endpoint runs SQL through profiled SQLAlchemy Engine]
  C --> D[setup_sql_profiler listeners capture query start/end]
  D --> E[Query data stored in request-local context]
  E --> F[Middleware sets X-DB-Queries, X-DB-Time, X-Total-Time]

Requirements

Item Requirement
Python >=3.10 (CI runs 3.10 through 3.14)
Framework FastAPI
Database layer SQLAlchemy Engine

Code Convention / Style

  • Use Ruff for linting and formatting.
  • Use MyPy (strict mode) for type checks.
  • Keep changes small and typed where possible.

Development

Install dev dependencies and run checks:

uv sync --locked --all-extras --dev
make ci
python -m pytest

make ci runs:

  • Ruff lint/format checks
  • MyPy strict type checks

Contributing

  1. Create a branch from development (for example, feature/<name> or fix/<name>).
  2. Keep the pull request focused on a single change.
  3. Add or update tests when behavior changes.
  4. Run checks locally (make ci and python -m pytest).
  5. Open a PR with a clear summary of what changed, why, and how it was tested.

Scope

FastAPI-Silk focuses on SQL profiling and request timing headers. It does not provide a built-in dashboard UI.

License

GNU General Public License v3.0 (GPL-3.0). See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastapi_silk-1.0.5.1.tar.gz (135.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastapi_silk-1.0.5.1-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_silk-1.0.5.1.tar.gz.

File metadata

  • Download URL: fastapi_silk-1.0.5.1.tar.gz
  • Upload date:
  • Size: 135.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fastapi_silk-1.0.5.1.tar.gz
Algorithm Hash digest
SHA256 1aecd9b736464dbe4553544b455890c28f665899c529e7f072452abca6715956
MD5 02c7d4b712b575a65195fd9aff796046
BLAKE2b-256 bafab22c69792bec8dc522a7f9d4f4899ddee82feb89abc2159d65ce12381c26

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastapi_silk-1.0.5.1.tar.gz:

Publisher: publish.yml on Nikolaev3Artem/fastapi-silk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fastapi_silk-1.0.5.1-py3-none-any.whl.

File metadata

  • Download URL: fastapi_silk-1.0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 20.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fastapi_silk-1.0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 022959d1463e316f485b3cd0fac48d59326a3e22dadf549e67ed1361cb9f577d
MD5 41e50168a1b470b66fce97f94c72b5c7
BLAKE2b-256 88f664864ee90c585867a9b9b3cd57e43898ef7788298ae3c0303d7c38c710bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastapi_silk-1.0.5.1-py3-none-any.whl:

Publisher: publish.yml on Nikolaev3Artem/fastapi-silk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page