SQL para SQLAlchemy

SQL DDL to Python SQLAlchemy 2.0 Model Generator

Converta instruções SQL CREATE TABLE em modelos fortemente tipados do Python SQLAlchemy 2.0 DeclarativeBase com anotações modernas Mapped e mapped_column.

Predefinições:
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
Chave estrangeirapostgres
1Chave estrangeira

Execução Local Zero-Knowledge

Todo o processamento, análise e geração de código ocorrem estritamente na memória do seu navegador. Zero uploads para servidores externos.

Motor Reativo de Submilissegundos

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

Production Ready Export

Clean, optimized output formats ready for immediate deployment.

Referência técnica e guia de arquitetura

Guia do Desenvolvedor: Gerador de Modelos Python SQLAlchemy 2.0 a partir de SQL DDL — Guia de referência

Converta instruções SQL CREATE TABLE em modelos fortemente tipados do Python SQLAlchemy 2.0 DeclarativeBase com anotações modernas Mapped e mapped_column.

Parâmetros principais e controles

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

Dialeto SQL de destino para interpretar tipos específicos do banco, como SERIAL, ENUM, JSONB e UUID.

Padrão: postgresql
Estilo de AnotaçãoEnum (mapped_column | legacy_column)

Gera anotações de tipo modernas Mapped[T] do SQLAlchemy 2.0 ou a sintaxe clássica Column() do SQLAlchemy 1.4.

Padrão: mapped_column
Formato de Campos AnuláveisEnum (union_pipe | optional)

Tipagem de colunas que aceitam nulo: operador de união do Python 3.10+ (Mapped[str | None]) ou typing.Optional (Mapped[Optional[str]]).

Padrão: union_pipe
Gerar Relacionamentos ORMBoolean (true | false)

Detecta automaticamente restrições FOREIGN KEY e constrói propriedades bidirecionais relationship().

Padrão: true
Nome da Classe BaseString

Nome da classe base declarativa que herda de SQLAlchemy 2.0 DeclarativeBase.

Padrão: Base

Dicas profissionais e melhores práticas

Adotar Mapped[int] e mapped_column

Adotar Mapped[int] e mapped_column() garante suporte total de tipagem em ferramentas como Mypy, Pyright e no VS Code sem plugins proprietários.

Resolução Automática com back_populates

Ao analisar referências de chave estrangeira (FOREIGN KEY), o gerador cria tanto o campo ForeignKey na tabela dependente quanto o atributo relationship com back_populates na entidade principal.

Tipos característicos do PostgreSQL

Tipos característicos do PostgreSQL, como JSONB, ARRAY e UUID, são mapeados diretamente para as classes especializadas em sqlalchemy.dialects.postgresql.

Os modelos gerados exportam

Os modelos gerados exportam Base.metadata para fácil detecção em migrações automáticas do Alembic e interoperabilidade com Pydantic v2 via from_attributes.

Problemas comuns e solução de problemas

Falhas de parsing provocadas por triggers ou rotinas customizadas

Remova gatilhos (triggers), procedures ou comandos ALTER TABLE proprietários, mantendo apenas a sintaxe padrão de CREATE TABLE.

Chaves primárias compostas não reconhecidas em todas as colunas

Garanta que a cláusula PRIMARY KEY (col1, col2) esteja expressa no final do DDL; o analisador marcará primary_key=True em cada mapped_column correspondente.

Dependências circulares de chave estrangeira entre modelos

Utilize strings para indicar os nomes dos modelos em relationship('NomeDoModelo'), permitindo a resolução tardia (forward reference) no runtime do Python.

Perguntas frequentes (FAQ)

Este gerador utiliza o padrão moderno do SQLAlchemy 2.0?▼

Sim. Ele gera código baseado na arquitetura padrão do SQLAlchemy 2.0 com DeclarativeBase, Mapped[T] e mapped_column(), substituindo o antigo Column() da versão 1.x.

Como colunas anuláveis e valores padrão são traduzidos?▼

Colunas sem restrição NOT NULL recebem Mapped[T | None] e nullable=True. Cláusulas DEFAULT do SQL são mapeadas para os parâmetros server_default ou default.

Minha estrutura de banco de dados é enviada para algum servidor?▼

Não. Todo o processo de tokenização, análise de sintaxe e geração de código Python ocorre 100% no seu navegador via JavaScript no lado do cliente.

É possível converter múltiplos comandos CREATE TABLE de uma só vez?▼

Sim. Você pode colar um script DDL completo contendo dezenas de tabelas; o gerador organiza os modelos respeitando as ordens de dependência entre as tabelas.

Como os tipos ENUM do banco de dados são mapeados?▼

Tipos ENUM encontrados no DDL são automaticamente criados como classes nativas enum.Enum do Python e vinculados à respectiva coluna do SQLAlchemy.

Ferramentas e utilitários relacionados

Todas as ferramentas →
Guia do Desenvolvedor: Gerador de Modelos Struct GORM em Golang a partir de DDL SQLDesenvolvimento

Converta esquemas SQL CREATE TABLE em definições de struct em Golang com tags GORM, tags JSON e correspondência tipada de tipos Go.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Modelos Sequelize TypeScript a partir de SQL DDLDesenvolvimento

Referência técnica completa para converter instruções SQL CREATE TABLE DDL em modelos Sequelize TypeScript fortemente tipados, definições DataTypes, atributos CreationOptional e chamadas Model.init.

Abrir ferramenta→
Json To Elixir Ecto Referência para DesenvolvedoresDesenvolvimento

Guia técnico e de configuração arquitetural para compilar payloads JSON brutos em esquemas Elixir Ecto de produção, migrações, changesets e typespecs do Dialyzer.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Case Classes JSON para Scala 3 e 2Desenvolvimento

Converta payloads JSON em case classes tipadas para Scala com suporte a codecs automáticos do Circe, Play JSON e zio-json.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de DTOs Tipados Readonly em PHP 8.2+ a partir de JSONDesenvolvimento

Converta dados JSON em DTOs modernos com readonly classes do PHP 8.2+, promoção de construtor e desserializadores fromArray.

Abrir ferramenta→
Cheatsheet de TypeScript para GraphQL SDLDesenvolvimento

Referência técnica para desenvolvedores converterem interfaces, tipos e enums TypeScript em esquemas GraphQL Schema Definition Language (SDL) para produção.

Abrir ferramenta→