DEV Community

William Rodriguez
William Rodriguez

Posted on

Fluent SQL without injection risks: The wsqlite QueryBuilder.

Fluent SQL without injection risks: The wsqlite QueryBuilder.

String-formatting SQL queries in Python is how data leaks happen. wsqlite's fluent QueryBuilder lets you build complex queries with JOINs, aggregations, and subqueries with total SQL injection immunity.

Here is how you use QueryBuilder Fluent SQL API in production with wsqlite:

from wsqlite.builders import QueryBuilder
from wsqlite.core.connection import get_connection

with get_connection("ecommerce.db") as conn:
    results = (
        QueryBuilder("users")
        .select("users.id", "users.name", "COUNT(orders.id) as order_count")
        .join("orders", "users.id = orders.user_id", "LEFT")
        .where("users.status", "=", "active")
        .group_by("users.id")
        .having("order_count", ">", 5)
        .order_by("order_count", "DESC")
        .limit(10)
        .execute(conn)
    )
    for row in results:
        print(f"User: {row['name']} | Orders: {row['order_count']}")
Enter fullscreen mode Exit fullscreen mode

Why developers love wsqlite:

  • Define database tables using standard Pydantic v2 models.
  • Auto-syncs columns on startup without writing manual migrations.
  • Thread-safe connection pooling with WAL mode enabled by default (5,000+ inserts/sec).
  • Full sync and async/await support.

Check out the repo on GitHub!

Top comments (0)