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