prism-py is a Python library for automatic API generation from database schemas. It creates a complete REST API that mirrors your database structure, handling tables, views, functions, and procedures with proper type safety and validation.
Built on top of FastAPI, prism-py eliminates boilerplate code and provides a comprehensive type system for API development, allowing you to focus on business logic instead of API structure.
Note: This library is part of the Prism ecosystem, which includes prism-ts, a TypeScript client library that consumes prism-py APIs with full type safety.
- Automatic Route Generation: Create CRUD endpoints for tables, views, functions, and procedures
- Composite Primary Keys: Full support for tables with multi-column primary keys.
- String Length Validation: Automatic server-side validation based on database schema (e.g.,
VARCHAR(50)). - Type Safety: Full type handling with proper conversions between SQL and Python types
- Database Independence: Support for PostgreSQL, MySQL, and SQLite
- Schema-Based Organization: Routes organized by database schemas for clean API structure
- Enhanced Filtering: Sorting, pagination, and complex query support
- Metadata API: Explore your database structure programmatically
- Health Monitoring: Built-in health check endpoints
- Zero Boilerplate: Generate complete APIs with minimal code
pip install prism-pyHere's a minimal example to get you started:
from fastapi import FastAPI
from prism import ApiPrism, PrismConfig, DbClient, DbConfig, PoolConfig, ModelManager
# Initialize FastAPI app
app = FastAPI()
# Configure database connection
db_client = DbClient(
config=DbConfig(
db_type="postgresql",
driver_type="sync",
database="yourdb",
user="username",
password="password",
host="localhost",
port=5432,
pool_config=PoolConfig(
pool_size=5,
max_overflow=10,
pool_pre_ping=True
)
)
)
# Create model manager with selected schemas
model_manager = ModelManager(
db_client=db_client,
include_schemas=["public", "app"]
)
# Initialize API generator
api_prism = ApiPrism(
config=PrismConfig(
project_name="My API",
version="1.0.0",
description="Auto-generated API for my database"
),
app=app
)
# Generate all routes
api_prism.generate_all_routes(model_manager)
# Print welcome message with API documentation link
api_prism.print_welcome(db_client)prism-py automatically creates the following types of routes:
POST /{schema}/{table}- Create a recordGET /{schema}/{table}- Read records with filteringPUT /{schema}/{table}- Update recordsDELETE /{schema}/{table}- Delete records
GET /{schema}/{view}- Read from view with optional filtering
POST /{schema}/fn/{function}- Execute database functionPOST /{schema}/proc/{procedure}- Execute stored procedure
GET /dt/schemas- List all database schemas and structureGET /dt/{schema}/tables- List all tables in a schemaGET /dt/{schema}/views- List all views in a schemaGET /dt/{schema}/functions- List all functions in a schemaGET /dt/{schema}/procedures- List all procedures in a schema
GET /health- Get API health statusGET /health/ping- Basic connectivity checkGET /health/cache- Check metadata cache statusPOST /health/clear-cache- Clear and reload metadata cache
See the examples directory for complete sample applications:
- Hub Example: Shows complex database integration with multiple schemas
- Basic Example: Demonstrates essential setup and configuration
prism-py is part of the Prism ecosystem, designed to create a seamless bridge between your database and type-safe client applications:
- prism-py (Python): Server-side library for automatic API generation
- prism-ts (TypeScript, formerly ts-prism): Client-side library for consuming prism-py APIs with full type safety
Together, these libraries enable end-to-end type safety and eliminate boilerplate code across your full stack.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.