SQL vers SQLAlchemy

SQL DDL to Python SQLAlchemy 2.0 Model Generator

Convertissez vos instructions SQL CREATE TABLE en modèles Python SQLAlchemy 2.0 DeclarativeBase fortement typés avec les annotations Mapped et mapped_column.

Préréglages :
Dialect:
Typing:
Entréepostgres
"""
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 Attributes9Champs
Clé étrangèrepostgres
1Clé étrangère

Exécution Locale Zero-Knowledge

Tous les traitements, analyses et générations s'exécutent strictement dans la mémoire de votre navigateur. Zéro transmission vers un serveur externe.

Moteur Réactif Submilliseconde

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

Production Ready Export

Clean, optimized output formats ready for immediate deployment.

Référence technique et guide d'architecture

Guide Développeur : Générateur de Modèles Python SQLAlchemy 2.0 depuis SQL DDL — Guide de référence

Convertissez vos instructions SQL CREATE TABLE en modèles Python SQLAlchemy 2.0 DeclarativeBase fortement typés avec les annotations Mapped et mapped_column.

Paramètres clés et contrôles

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

Dialecte SQL cible pour interpréter fidèlement les types spécifiques comme SERIAL, ENUM, JSONB et UUID.

Par défaut : postgresql
Style d'AnnotationEnum (mapped_column | legacy_column)

Génère des annotations de type modernes SQLAlchemy 2.0 Mapped[T] ou la syntaxe classique rétrocompatible 1.4 Column().

Par défaut : mapped_column
Format des Champs NullablesEnum (union_pipe | optional)

Typage des colonnes acceptant les valeurs nulles : opérateur union Python 3.10+ (Mapped[str | None]) ou typing.Optional (Mapped[Optional[str]]).

Par défaut : union_pipe
Générer les Relations ORMBoolean (true | false)

Détecte automatiquement les contraintes FOREIGN KEY pour construire des propriétés bidirectionnelles relationship().

Par défaut : true
Nom de la Classe de BaseString

Nom de la classe de base déclarative héritant de DeclarativeBase dans SQLAlchemy 2.0.

Par défaut : Base

Conseils de pro et bonnes practices

L'utilisation conjointe de Mapped[int]

L'utilisation conjointe de Mapped[int] et mapped_column() garantit une vérification statique totale sous Mypy, Pyright et VS Code sans nécessiter de plugin tiers.

Lors de l'analyse des clés étrangères

Lors de l'analyse des clés étrangères (FOREIGN KEY), le générateur produit à la fois la colonne ForeignKey sur la table fille et la relation relationship avec back_populates sur la table parente.

Les types propres à PostgreSQL tels

Les types propres à PostgreSQL tels que JSONB, ARRAY et UUID sont directement associés aux types dédiés de sqlalchemy.dialects.postgresql au lieu de types génériques.

Les modèles générés exposent

Les modèles générés exposent Base.metadata, facilitant la détection automatique avec Alembic et l'interopérabilité avec les schémas Pydantic v2 via from_attributes.

Pièges courants et dépannage

Erreurs d'analyse dues à des triggers ou procédures stockées

Supprimez les déclencheurs (triggers), fonctions stockées et commandes ALTER TABLE propriétaires pour ne conserver que la syntaxe standard CREATE TABLE.

Clés primaires composites incomplètes

Vérifiez que la clause PRIMARY KEY (col1, col2) figure bien en fin de bloc DDL ; le parseur assignera primary_key=True à chaque mapped_column concernée.

Références circulaires entre relations ORM

Indiquez les noms des classes cibles sous forme de chaînes de caractères dans relationship('ModeleCible') pour permettre la résolution différée à l'exécution en Python.

Foire aux questions (FAQ)

Ce générateur prend-il en charge la syntaxe moderne de SQLAlchemy 2.0 ?▼

Oui. Il produit par défaut le standard SQLAlchemy 2.0 avec DeclarativeBase, Mapped[T] et mapped_column(), abandonnant l'ancienne syntaxe Column() de la version 1.x.

Comment les colonnes nullables et valeurs par défaut sont-elles traduites ?▼

Les colonnes dépourvues de la mention NOT NULL sont typées en Mapped[T | None] avec nullable=True. Les clauses DEFAULT SQL sont converties en paramètres server_default ou default.

Mon schéma SQL est-il transmis à un serveur externe ?▼

Non. L'analyse lexicale, la construction de l'arbre syntaxique et la génération du code Python s'exécutent intégralement en local dans votre navigateur grâce au JavaScript côté client.

Puis-je convertir plusieurs instructions CREATE TABLE simultanément ?▼

Oui. Vous pouvez coller un script DDL complet comportant plusieurs tables ; le générateur ordonne automatiquement les classes de modèles selon leurs dépendances.

Comment les types ENUM de la base de données sont-ils gérés ?▼

Les types ENUM du DDL sont convertis en classes natives Python héritant de enum.Enum et intégrés dans les définitions de colonnes SQLAlchemy.

Outils et utilitaires connexes

Tous les outils →
Guide Développeur : Générateur de Modèles Struct Golang GORM depuis SQL DDLDéveloppement

Convertissez vos schémas SQL CREATE TABLE en définitions de structures (struct) Golang avec balises GORM, balises JSON et typage Go précis.

Ouvrir l'outil→
Guide Développeur : Générateur de Modèles Sequelize TypeScript depuis SQL DDLDéveloppement

Guide technique complet pour convertir les instructions SQL CREATE TABLE DDL en modèles typés Sequelize TypeScript, définitions DataTypes, attributs CreationOptional et déclarations Model.init.

Ouvrir l'outil→
Json To Elixir Ecto Référence DéveloppeurDéveloppement

Guide architectural et référence de configuration pour compiler des données JSON brutes en schémas Elixir Ecto de production, migrations, changesets et typespecs Dialyzer.

Ouvrir l'outil→
Guide Développeur : Générateur de Case Classes JSON vers Scala 3 & Scala 2Développement

Convertissez vos charges utiles JSON en case classes Scala sécurisées avec dérivation automatique de codecs Circe, Play JSON ou zio-json.

Ouvrir l'outil→
Guide Développeur : Générateur de DTOs Typés Readonly en PHP 8.2+ depuis JSONDéveloppement

Convertissez des données JSON en DTOs modernes avec les readonly classes PHP 8.2+, promotion de constructeur et désérialiseurs fromArray.

Ouvrir l'outil→
Aide-mémoire TypeScript vers GraphQL SDLDéveloppement

Référence pour développeurs convertissant interfaces, types et énumérations TypeScript en schémas GraphQL Schema Definition Language (SDL) prêts pour la production.

Ouvrir l'outil→