Add your description here
Project description
FastAPI DataTables
A simple integration of DataTables.js (or any standard DataTables-like frontend library) with FastAPI and SQLAlchemy.
This package makes it easy to implement:
- Server-side pagination
- Sorting
- Searching (deep search supported)
- Filtering
- Transforming query results
Perfect for handling large datasets efficiently while keeping your API clean and async-friendly.
🚀 Installation
pip install fp-datatables
📖 Quick Start Example
1. Setup database and models
from fastapi import FastAPI, Depends
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from sqlalchemy import Column, Integer, String, select
from datatables import DataTables, DataTablesRequest, DataTablesResponse
from pydantic import BaseModel
DATABASE_URL = "sqlite+aiosqlite:///./students.db"
engine = create_async_engine(DATABASE_URL, echo=False, future=True)
async_session = sessionmaker(bind=engine, class_=AsyncSession, expire_on_commit=False)
Base = declarative_base()
# Dependency for DB session
async def get_db() -> AsyncSession:
async with async_session() as session:
yield session
# Model
class Student(Base):
__tablename__ = "students"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, nullable=False)
age = Column(Integer, nullable=False)
email = Column(String, nullable=False, unique=True)
# Schema
class StudentSchema(BaseModel):
id: int
name: str
age: int
2. Setup FastAPI app
app = FastAPI()
@app.on_event("startup")
async def startup():
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
3. Insert test data
import random
from faker import Faker
faker = Faker()
@app.get("/insert_students")
async def insert_students():
async with async_session() as session:
students = [
Student(
name=faker.name(),
age=random.randint(18, 25),
email=faker.unique.email(),
)
for _ in range(1000)
]
session.add_all(students)
await session.commit()
return {"message": "1000 random students inserted successfully!"}
4. Datatables API endpoint
@app.post("/students", response_model=DataTablesResponse[list[StudentSchema]])
async def get_students(
request: DataTablesRequest, db: AsyncSession = Depends(get_db)
):
stmt = select(Student)
datatable = DataTables(db, Student, stmt)
return await datatable.process(request)
⚡ Frontend Usage
You can use DataTables.js (or any DataTables-compatible frontend) to consume this API. Example DataTables setup (jQuery):
$('#studentsTable').DataTable({
serverSide: true,
processing: true,
ajax: {
url: "/students",
type: "POST",
contentType: "application/json",
data: function (d) {
return JSON.stringify(d);
}
},
columns: [
{ data: "id" },
{ data: "name" },
{ data: "age" }
]
});
✨ Features
- Async-first (built on FastAPI + SQLAlchemy 2.0 async)
- Pagination, sorting, searching out of the box
- Works with any frontend datatable library (DataTables.js, PrimeVue DataTable, etc.)
- Supports deep field search (
relation.field) - Easy integration with Pydantic models
🛠️ Roadmap
- Support for joins and relationships
- More advanced filters
- Examples for Vue/React/Angular integration
📜 License
MIT License © 2025 Rohit Kumar
👉 Would you like me to also add an "Advanced Usage" section (with filtering, deep search student.classroom.name, and custom column transformations) so your README looks more complete for real-world use cases?
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fp_datatables-0.1.3.tar.gz.
File metadata
- Download URL: fp_datatables-0.1.3.tar.gz
- Upload date:
- Size: 8.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b027335110e8a1ac76621c6b83f1e7931fcc92cfeab202de54151d64427a5900
|
|
| MD5 |
e056444e6bdaf6d79959ace550a15671
|
|
| BLAKE2b-256 |
c16bbe5347e6018d644c1169c34c9647ae898ebfd4bfb034a7f834c4542685eb
|
File details
Details for the file fp_datatables-0.1.3-py3-none-any.whl.
File metadata
- Download URL: fp_datatables-0.1.3-py3-none-any.whl
- Upload date:
- Size: 7.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d6693486150eb3b5612f60503fc5bca20024c6765a097071667f8d4bef9d195
|
|
| MD5 |
ed8ac654eece7c046a19df1506d65682
|
|
| BLAKE2b-256 |
ef1126a7d2edc51f79b0bb2f3af8a47a885a777b813b951046da1e2ab0f0e8e1
|