Collez les définitions de tables et choisissez l’ORM. Adaptez les types et le comportement propre à votre application avant d’utiliser l’ébauche.
Fonctionne localement dans votre navigateurCollez des instructions CREATE TABLE, choisissez Prisma, Drizzle, TypeORM ou SQLAlchemy, puis cliquez sur Générer des modèles. Chaque table du texte est lue — colonnes, types, NOT NULL, clés primaires, valeurs par défaut et clés étrangères — et le résultat contient un bloc de modèle par table, prêt à copier ou à télécharger.
Tout se passe dans la page : la génération n’a déclenché aucune requête réseau lors des tests, le schéma ne quitte donc pas le navigateur et l’outil continue de fonctionner quand la connexion tombe.
Les noms de tables, avec ou sans préfixe de schéma (app.accounts ressort en accounts), les noms de colonnes entre accents graves, guillemets doubles ou crochets, et le type de chaque colonne. NOT NULL rend un champ obligatoire, une colonne nullable reste optionnelle. Les clés primaires proviennent d’un PRIMARY KEY au niveau de la colonne et d’un PRIMARY KEY (a, b) au niveau de la table, clés composites comprises.
L’auto-incrément vient du DDL et non du nom de la colonne : SERIAL, BIGSERIAL, AUTO_INCREMENT, GENERATED … AS IDENTITY et une valeur par défaut nextval(…) sont reconnus, tandis qu’un simple PRIMARY KEY reste une clé ordinaire. DEFAULT CURRENT_TIMESTAMP et now() deviennent la valeur « now » propre à chaque cible. Les clés étrangères sont lues dans les REFERENCES au niveau de la colonne comme dans les clauses CONSTRAINT … FOREIGN KEY de la table. Les commentaires de ligne (-- et # de MySQL) et de bloc sont retirés avant l’analyse.
Prisma : un modèle par table avec @id, @@id([...]) lorsque la clé couvre plusieurs colonnes, @default(autoincrement()) uniquement là où le DDL le déclare, @default(now()) pour les horodatages courants, @db.Uuid pour les colonnes UUID et @map / @@map pour que les noms générés pointent toujours vers les noms SQL d’origine.
Drizzle ORM : des déclarations pgTable écrites pour le dialecte Postgres, avec primaryKey({ columns: [...] }) pour les clés composites. TypeORM : @PrimaryGeneratedColumn uniquement pour les colonnes auto-incrémentées et @PrimaryColumn pour toutes les autres clés, afin que les décorateurs correspondent au schéma. SQLAlchemy : des classes DeclarativeBase de style 2.0 avec annotations Mapped[...], mapped_column() et ForeignKey('table.colonne') pour les deux écritures de clé étrangère ; la liste des imports ne contient que ce que les modèles utilisent.
La correspondance des types est volontairement grossière. varchar, char, text et citext deviennent le type chaîne de la cible, DECIMAL et NUMERIC une colonne décimale annotée Decimal, JSON, JSONB et XML le type JSON générique, et tout type inconnu retombe sur string. Comparez une table représentative avec le schéma réel avant de générer des migrations à partir du résultat.
Tout ce qui n’est pas une colonne reste dans la base : CHECK, UNIQUE, index, vues, déclencheurs, séquences, collations et clauses de stockage ne sont pas convertis, et aucune cible ne reçoit de propriétés de relation ou de navigation — une clé étrangère reste une colonne simple partout, sauf en SQLAlchemy où ForeignKey est ajouté. La sortie Drizzle reste en dialecte Postgres, quel que soit le dialecte du DDL collé.