Pydantic Models
python
Generate Pydantic BaseModel classes with Field validators from SQL schema
Example Output
Generated from the pet-store sample schema:
python
# Generated by @sqldoc/templates/pydantic -- DO NOT EDIT
from pydantic import BaseModel, Field
from typing import Optional
from datetime import date
from datetime import datetime
from decimal import Decimal
class Adoption(BaseModel):
id: int
pet_id: int
owner_id: int
adopted_at: datetime
adoption_fee: Decimal
class AdoptionsAuditLog(BaseModel):
id: int
table_name: str
operation: str
changed_at: datetime
old_data: Optional[dict] = None
new_data: Optional[dict] = None
class Category(BaseModel):
id: int
name: str = Field(min_length=1)
description: Optional[str] = None
class LegacyInventory(BaseModel):
id: int
item_name: Optional[str] = None
old_sku: Optional[str] = None
quantity: Optional[int] = None
class Location(BaseModel):
id: int
name: str
address: str
city: str
zip: Optional[str] = None
class MedicalRecord(BaseModel):
id: int
pet_id: int
visit_date: date
diagnosis: str
treatment: Optional[str] = None
vet_name: Optional[str] = None
class Owner(BaseModel):
id: int
name: str = Field(min_length=1)
email: str = Field(pattern='^[^@]+@[^@]+\.[^@]+$')
phone: Optional[str] = Field(default=None, min_length=7, max_length=20)
created_at: Optional[datetime] = None
class Pet(BaseModel):
id: int
name: str = Field(min_length=1)
sku: str = Field(pattern='^[A-Z]{3}-[0-9]{4}$')
price: Decimal = Field(ge=0, le=99999)
status: str
category_id: Optional[int] = None
internal_notes: Optional[str] = None
created_at: Optional[datetime] = None
class Review(BaseModel):
id: int
pet_id: int
owner_id: int
rating: int = Field(ge=1, le=5)
body: Optional[str] = None
location_id: Optional[int] = None
created_at: Optional[datetime] = None
class StaffAuditLog(BaseModel):
id: int
table_name: str
operation: str
changed_at: datetime
old_data: Optional[dict] = None
new_data: Optional[dict] = NoneUsage
Add to your sqldoc.config.ts:
typescript
export default {
dialect: 'postgres',
schema: ['./schema.sql'],
codegen: [
{
template: 'pydantic',
output: './generated/models.py',
},
],
}Then run:
bash
sqldoc codegen