Skip to content
On this page

String

python

Generate SQLAlchemy ORM model classes with Column definitions from SQL schema

Example Output ​

Generated from the pet-store sample schema:

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

from sqlalchemy import BigInteger, Column, Date, DateTime, Integer, JSON, Numeric, String, Text, ForeignKey
from sqlalchemy.orm import declarative_base

Base = declarative_base()


class Adoption(Base):
    __tablename__ = 'adoptions'

    id = Column(Integer, primary_key=True)
    pet_id = Column(Integer, ForeignKey('pets.id'), nullable=False)
    owner_id = Column(Integer, ForeignKey('owners.id'), nullable=False)
    adopted_at = Column(DateTime, nullable=False)
    adoption_fee = Column(Numeric, nullable=False)


class AdoptionsAuditLog(Base):
    __tablename__ = 'adoptions_audit_log'

    id = Column(BigInteger, primary_key=True)
    table_name = Column(Text, nullable=False)
    operation = Column(Text, nullable=False)
    old_data = Column(JSON)
    new_data = Column(JSON)
    changed_at = Column(DateTime, nullable=False)


class Category(Base):
    __tablename__ = 'categories'

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    description = Column(Text)


class LegacyInventory(Base):
    __tablename__ = 'legacy_inventory'

    id = Column(Integer, primary_key=True)
    item_name = Column(String)
    old_sku = Column(String)
    quantity = Column(Integer)


class Location(Base):
    __tablename__ = 'locations'

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    address = Column(Text, nullable=False)
    city = Column(String, nullable=False)
    zip = Column(String)


class MedicalRecord(Base):
    __tablename__ = 'medical_records'

    id = Column(Integer, primary_key=True)
    pet_id = Column(Integer, ForeignKey('pets.id'), nullable=False)
    visit_date = Column(Date, nullable=False)
    diagnosis = Column(Text, nullable=False)
    treatment = Column(Text)
    vet_name = Column(String)


class Owner(Base):
    __tablename__ = 'owners'

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    email = Column(String, nullable=False)
    phone = Column(String)
    created_at = Column(DateTime)


class Pet(Base):
    __tablename__ = 'pets'

    id = Column(Integer, primary_key=True)
    category_id = Column(Integer, ForeignKey('categories.id'))
    name = Column(String, nullable=False)
    sku = Column(String, nullable=False)
    price = Column(Numeric, nullable=False)
    internal_notes = Column(Text)
    status = Column(String, nullable=False)
    created_at = Column(DateTime)


class Review(Base):
    __tablename__ = 'reviews'

    id = Column(Integer, primary_key=True)
    pet_id = Column(Integer, nullable=False)
    owner_id = Column(Integer, nullable=False)
    rating = Column(Integer, nullable=False)
    body = Column(Text)
    location_id = Column(Integer, ForeignKey('locations.id'))
    created_at = Column(DateTime)


class StaffAuditLog(Base):
    __tablename__ = 'staff_audit_log'

    id = Column(BigInteger, primary_key=True)
    table_name = Column(Text, nullable=False)
    operation = Column(Text, nullable=False)
    old_data = Column(JSON)
    new_data = Column(JSON)
    changed_at = Column(DateTime, nullable=False)

Usage ​

Add to your sqldoc.config.ts:

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

Then run:

bash
sqldoc codegen