Skip to content
On this page

Python Dataclasses

python

Generate Python @dataclass classes from SQL schema

Example Output ​

Generated from the pet-store sample schema:

python
# Generated by @sqldoc/templates/python-dataclasses -- DO NOT EDIT

from dataclasses import dataclass
from typing import Optional
from datetime import date
from datetime import datetime
from decimal import Decimal


@dataclass
class Adoption:
    id: int
    pet_id: int
    owner_id: int
    adopted_at: datetime
    adoption_fee: Decimal


@dataclass
class AdoptionsAuditLog:
    id: int
    table_name: str
    operation: str
    changed_at: datetime
    old_data: Optional[dict] = None
    new_data: Optional[dict] = None


@dataclass
class Category:
    id: int
    name: str
    description: Optional[str] = None


@dataclass
class LegacyInventory:
    id: int
    item_name: Optional[str] = None
    old_sku: Optional[str] = None
    quantity: Optional[int] = None


@dataclass
class Location:
    id: int
    name: str
    address: str
    city: str
    zip: Optional[str] = None


@dataclass
class MedicalRecord:
    id: int
    pet_id: int
    visit_date: date
    diagnosis: str
    treatment: Optional[str] = None
    vet_name: Optional[str] = None


@dataclass
class Owner:
    id: int
    name: str
    email: str
    phone: Optional[str] = None
    created_at: Optional[datetime] = None


@dataclass
class Pet:
    id: int
    name: str
    sku: str
    price: Decimal
    status: str
    category_id: Optional[int] = None
    internal_notes: Optional[str] = None
    created_at: Optional[datetime] = None


@dataclass
class Review:
    id: int
    pet_id: int
    owner_id: int
    rating: int
    body: Optional[str] = None
    location_id: Optional[int] = None
    created_at: Optional[datetime] = None


@dataclass
class StaffAuditLog:
    id: int
    table_name: str
    operation: str
    changed_at: datetime
    old_data: Optional[dict] = None
    new_data: Optional[dict] = None

Usage ​

Add to your sqldoc.config.ts:

typescript
export default {
  dialect: 'postgres',
  schema: ['./schema.sql'],
  codegen: [
    {
      template: 'python-dataclasses',
      output: './generated/models.py',
    },
  ],
}

Then run:

bash
sqldoc codegen