SQL a SQLAlchemy

SQL DDL to Python SQLAlchemy 2.0 Model Generator

Convierta sentencias SQL CREATE TABLE en modelos fuertemente tipados de Python SQLAlchemy 2.0 DeclarativeBase con anotaciones Mapped y mapped_column.

Preajustes:
Dialect:
Typing:
Entradapostgres
"""
SQLAlchemy 2.0 DeclarativeBase Models
Generated by ToolsAA SQL to SQLAlchemy Generator
Dialect: POSTGRES | Generated Tables: 6
"""

from typing import Any, List, Optional
import uuid
import enum

from sqlalchemy import (
    BigInteger,
    Boolean,
    Date,
    DateTime,
    Float,
    ForeignKey,
    Index,
    Integer,
    Numeric,
    SmallInteger,
    String,
    Text,
    Time,
    UniqueConstraint,
    func,
    text,
)
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship


class Base(DeclarativeBase):
    pass


class UserRole(str, enum.Enum):
    CUSTOMER = "CUSTOMER"
    ADMIN = "ADMIN"
    VENDOR = "VENDOR"


class OrderStatus(str, enum.Enum):
    PENDING = "PENDING"
    PAID = "PAID"
    PROCESSING = "PROCESSING"
    SHIPPED = "SHIPPED"
    DELIVERED = "DELIVERED"
    CANCELLED = "CANCELLED"


class User(Base):
    __tablename__ = "users"

    id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default="gen_random_uuid(")

    def __repr__(self) -> str:
        return f"<User(id={self.id!r})>"


class UserProfile(Base):
    __tablename__ = "user_profiles"

    id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default="gen_random_uuid(")

    def __repr__(self) -> str:
        return f"<UserProfile(id={self.id!r})>"


class Product(Base):
    __tablename__ = "products"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    sku: Mapped[Optional[str]] = mapped_column(nullable=True)

    def __repr__(self) -> str:
        return f"<Product(id={self.id!r}, sku={self.sku!r})>"


class Order(Base):
    __tablename__ = "orders"

    __table_args__ = (
        Index("idx_orders_customer", "customer_id"),
    )

    id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default="gen_random_uuid(")

    # Relationships
    order_items: Mapped[List["OrderItem"]] = relationship(back_populates="order", cascade="all, delete-orphan")

    def __repr__(self) -> str:
        return f"<Order(id={self.id!r})>"


class OrderItem(Base):
    __tablename__ = "order_items"

    __table_args__ = (
        Index("idx_order_items_order", "order_id"),
    )

    id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
    order_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey("orders.id"), nullable=False)

    # Relationships
    order: Mapped["Order"] = relationship(back_populates="order_items")

    def __repr__(self) -> str:
        return f"<OrderItem(id={self.id!r}, order_id={self.order_id!r})>"


class AuditLog(Base):
    __tablename__ = "audit_logs"

    id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
    action: Mapped[Optional[str]] = mapped_column(nullable=True)

    def __repr__(self) -> str:
        return f"<AuditLog(id={self.id!r}, action={self.action!r})>"
Tables Parsed6DeclarativeBase model entities
Mapped Attributes9Campos
Clave foráneapostgres
1Clave foránea

Ejecución Local de Conocimiento Cero

Todo el procesamiento, análisis y generación de código se ejecutan estrictamente en la memoria del navegador. Cero subidas a servidores externos.

Motor Reactivo de Submilisegundos

All data payloads remain strictly local with zero external server communication.

Production Ready Export

Clean, optimized output formats ready for immediate deployment.

Referencia técnica y guía de arquitectura

Guía de Desarrollo: Generador de Modelos Python SQLAlchemy 2.0 desde SQL DDL — Guía de referencia

Convierta sentencias SQL CREATE TABLE en modelos fuertemente tipados de Python SQLAlchemy 2.0 DeclarativeBase con anotaciones Mapped y mapped_column.

Parámetros clave y controles

Dialecto SQLEnum (postgresql | mysql | sqlite | mssql | oracle)

Dialecto SQL de destino para interpretar tipos específicos como SERIAL, ENUM, JSONB y UUID.

Por defecto: postgresql
Estilo de AnotaciónEnum (mapped_column | legacy_column)

Genera anotaciones de tipo modernas Mapped[T] de SQLAlchemy 2.0 o sintaxis retrocompatible Column() de 1.4.

Por defecto: mapped_column
Formato de Campos NullableEnum (union_pipe | optional)

Tipado de columnas nulables: operador de unión de Python 3.10+ (Mapped[str | None]) o typing.Optional (Mapped[Optional[str]]).

Por defecto: union_pipe
Generar Relaciones ORMBoolean (true | false)

Detecta automáticamente restricciones FOREIGN KEY y construye atributos bidireccionales relationship().

Por defecto: true
Clase Base DeclarativaString

Nombre de la clase base declarativa que hereda de SQLAlchemy 2.0 DeclarativeBase.

Por defecto: Base

Consejos profesionales y mejores prácticas

El uso de Mapped[int] y mapped_column

El uso de Mapped[int] y mapped_column() proporciona soporte completo de comprobación de tipos en Mypy, Pyright y editores modernos sin plugins adicionales.

Al procesar claves foráneas

Al procesar claves foráneas (FOREIGN KEY), se crean tanto la referencia ForeignKey en la tabla hija como el atributo relationship con back_populates en la entidad padre.

Los tipos avanzados de PostgreSQL como

Los tipos avanzados de PostgreSQL como JSONB, ARRAY y UUID se asignan a sus equivalentes exactos de sqlalchemy.dialects.postgresql.

Los modelos generados exponen

Los modelos generados exponen Base.metadata, permitiendo autogenerar migraciones en Alembic y validar esquemas Pydantic v2 mediante from_attributes.

Errores comunes y solución de problemas

Errores de sintaxis causados por triggers o procedimientos almacenados

Excluya triggers específicos del motor, funciones y sentencias complejas de ALTER TABLE, dejando únicamente definiciones estándar CREATE TABLE.

Claves primarias compuestas no asignadas en todas las columnas

Verifique que la cláusula PRIMARY KEY (col1, col2) esté presente al final de la definición; el analizador marcará primary_key=True en cada mapped_column correspondiente.

Errores de referencia circular entre modelos relacionados

Utilice cadenas de texto para nombrar clases destino dentro de relationship('ModeloDestino'), permitiendo la resolución diferida en tiempo de ejecución.

Preguntas frecuentes (FAQ)

¿Esta herramienta soporta la sintaxis moderna de SQLAlchemy 2.0?▼

Sí. Genera código basado en el estándar moderno de SQLAlchemy 2.0 utilizando DeclarativeBase, Mapped[T] y mapped_column() en lugar de Column() de la versión 1.x.

¿Cómo se procesan las columnas nulables y los valores por defecto?▼

Las columnas sin restricción NOT NULL se tipifican como Mapped[T | None] con nullable=True, y los valores DEFAULT de SQL se convierten en server_default o default.

¿Se envían mis esquemas de base de datos a servidores externos?▼

No. Todo el análisis sintáctico de SQL y la generación de código Python se ejecutan al 100% en su navegador mediante JavaScript del lado del cliente.

¿Puedo convertir varias sentencias CREATE TABLE al mismo tiempo?▼

Sí. Puede pegar un archivo DDL completo con múltiples tablas; el generador ordenará las clases respetando las dependencias de claves foráneas.

¿Cómo se representan los tipos ENUM de la base de datos?▼

Los tipos ENUM definidos en el DDL se convierten automáticamente en clases enum.Enum nativas de Python y se vinculan a la columna SQLAlchemy correspondiente.

Herramientas y utilidades relacionadas

Todas las herramientas →
Guía para Desarrolladores: Generador de Modelos Struct GORM para Golang desde SQL DDLDesarrollo

Convierta esquemas SQL CREATE TABLE en definiciones de estructuras struct de Golang con etiquetas GORM, etiquetas JSON y tipos Go fuertemente tipados.

Abrir herramienta→
Guía de Desarrollo: Generador de Modelos Sequelize TypeScript desde SQL DDLDesarrollo

Referencia técnica para desarrolladores sobre la conversión de DDL SQL CREATE TABLE en modelos tipados Sequelize TypeScript, definiciones DataTypes, atributos CreationOptional y declaraciones Model.init.

Abrir herramienta→
Json To Elixir Ecto Referencia para DesarrolladoresDesarrollo

Guía técnica y de configuración arquitectónica para compilar cargas JSON en esquemas Elixir Ecto de producción, migraciones, changesets y typespecs de Dialyzer.

Abrir herramienta→
Guía de Desarrollo: Generador de Case Classes de JSON a Scala 3 y 2Desarrollo

Convierte cargas útiles JSON en case classes fuertemente tipadas para Scala con derivación automática de códecs para Circe, Play JSON o zio-json.

Abrir herramienta→
Guía para Desarrolladores del Generador de DTOs Tipados Readonly en PHP 8.2+ desde JSONDesarrollo

Convierte datos JSON en modernos DTOs con clases readonly de PHP 8.2+, promoción de constructor y deserializadores fromArray.

Abrir herramienta→
Guía Rápida de TypeScript a GraphQL SDLDesarrollo

Referencia técnica para desarrolladores sobre la conversión de interfaces, tipos y enums de TypeScript en esquemas GraphQL SDL listos para producción.

Abrir herramienta→