SQL zu SQLAlchemy

SQL DDL to Python SQLAlchemy 2.0 Model Generator

Konvertieren Sie SQL CREATE TABLE-Anweisungen in stark typisierte Python SQLAlchemy 2.0 DeclarativeBase-Modelle mit modernen Mapped- und mapped_column-Typannotationen.

Voreinstellungen:
Dialect:
Typing:
Eingabepostgres
"""
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 Attributes9Felder
Fremdschlüsselpostgres
1Fremdschlüssel

Zero-Knowledge Lokale Ausführung

Alle Datenverarbeitungen, Parsen und Generierungen laufen streng im lokalen Browserspeicher ab. Keine externen Server-Uploads.

Sub-Millisekunden AST-Engine

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

Production Ready Export

Clean, optimized output formats ready for immediate deployment.

Technische Referenz & Architektur-Leitfaden

SQL DDL zu Python SQLAlchemy 2.0 Modell-Generator — Referenz-Leitfaden

Konvertieren Sie SQL CREATE TABLE-Anweisungen in stark typisierte Python SQLAlchemy 2.0 DeclarativeBase-Modelle mit modernen Mapped- und mapped_column-Typannotationen.

Wichtige Parameter & Steuerelemente

SQL-DialektEnum (postgresql | mysql | sqlite | mssql | oracle)

Ziel-SQL-Dialekt zum präzisen Parsen datenbankspezifischer Typen wie SERIAL, ENUM, JSONB und UUID.

Standard: postgresql
AnnotationsstilEnum (mapped_column | legacy_column)

Erzeugt moderne SQLAlchemy 2.0 Mapped[T]-Typannotationen oder abwärtskompatible 1.4 Column()-Syntax.

Standard: mapped_column
Nullable-Typhinweis-FormatEnum (union_pipe | optional)

Python-Typformat für Nullable-Spalten: Python 3.10+ Union-Pipe (Mapped[str | None]) oder typing.Optional (Mapped[Optional[str]]).

Standard: union_pipe
Beziehungen automatisch generierenBoolean (true | false)

Erkennt Fremdschlüssel-Constraints (FOREIGN KEY) automatisch und generiert bidirektionale relationship()-ORM-Attribute.

Standard: true
Basisklassen-NameString

Name der deklarierenden Basisklasse, die von SQLAlchemy 2.0 DeclarativeBase erbt.

Standard: Base

Profi-Tipps & Best Practices

Die moderne Mapped[int]- und

Die moderne Mapped[int]- und mapped_column()-Syntax gewährleistet vollständige statische Typprüfung in Mypy, Pyright und modernen IDEs ohne zusätzliche Plugins.

Beim Parsen von Tabellen mit

Beim Parsen von Tabellen mit Fremdschlüsseln werden sowohl die ForeignKey-Spalte als auch die bidirektionale back_populates-Beziehung im Elternmodell automatisch angelegt.

Dialektspezifische PostgreSQL-Typen

Dialektspezifische PostgreSQL-Typen wie JSONB, ARRAY und UUID werden direkt auf sqlalchemy.dialects.postgresql gemappt anstatt auf generische Typen.

Die generierten Klassen exportieren

Die generierten Klassen exportieren Base.metadata und sind sofort mit Alembic Autogenerate sowie Pydantic v2 from_attributes kompatibel.

Häufige Fallstricke & Fehlerbehebung

Syntaxfehler bei proprietären Triggern oder Stored Procedures

Entfernen Sie herstellerspezifische Trigger, Prozeduren oder proprietäre ALTER TABLE-Befehle und behalten Sie reine CREATE TABLE-DDL bei.

Zusammengesetzte Primärschlüssel werden nicht vollständig erkannt

Stellen Sie sicher, dass PRIMARY KEY (spalte1, spalte2) am Ende des DDL-Blocks steht; der Parser weist allen beteiligten Spalten primary_key=True zu.

Zirkuläre Fremdschlüssel-Referenzen führen zu NameErrors

Verwenden Sie String-Referenzen in relationship('ZielModell'), damit Python zirkuläre Vorwärtsdeklarationen zur Laufzeit auflösen kann.

Häufig gestellte Fragen (FAQ)

Unterstützt dieser Generator die moderne SQLAlchemy 2.0-Syntax?▼

Ja. Er erzeugt standardmäßig DeclarativeBase, Mapped[T] und mapped_column() gemäß modernsten Best Practices von SQLAlchemy 2.0 anstelle der veralteten 1.x-Syntax.

Wie werden Nullable-Spalten und Standardwerte abgebildet?▼

Spalten ohne NOT NULL erhalten Mapped[T | None] mit nullable=True. SQL-DEFAULT-Ausdrücke werden in server_default- oder default-Parameter übersetzt.

Werden meine SQL-Schemadaten an einen Server übertragen?▼

Nein. Das Parsing, die Syntaxbaum-Analyse und die Codegenerierung laufen zu 100 % lokal in Ihrem Browser über JavaScript ab, ohne jeglichen Server-Upload.

Können mehrere CREATE TABLE-Befehle auf einmal konvertiert werden?▼

Ja. Sie können ein vollständiges DDL-Skript mit mehreren Tabellen einfügen; der Generator berücksichtigt Abhängigkeiten und ordnet die Klassenmodelle logisch an.

Wie werden relationale ENUM-Typen gehandhabt?▼

Benannte ENUM-Typen im DDL werden automatisch als eigenständige Python enum.Enum-Klassen generiert und in die Spaltendefinition eingebunden.

Verwandte Werkzeuge & Dienstprogramme

Alle Werkzeuge →