Pega las tablas y elige el ORM. Copia el borrador y adapta los tipos y el comportamiento propio de tu aplicación antes de usarlo.
Se ejecuta localmente en tu navegadorPega instrucciones CREATE TABLE, elige Prisma, Drizzle, TypeORM o SQLAlchemy y pulsa Generar modelos. Se lee cada tabla del texto —columnas, tipos, NOT NULL, claves primarias, valores por defecto y claves externas— y se devuelve un bloque de modelo por tabla, listo para copiar o descargar.
Todo ocurre en la página: al generar los modelos no se envió ninguna petición de red en las pruebas, así que el esquema no sale del navegador y la herramienta sigue funcionando cuando se cae la conexión.
Nombres de tabla, con o sin prefijo de esquema (app.accounts se emite como accounts), nombres de columna entre comillas invertidas, dobles o corchetes, y el tipo de cada columna. NOT NULL convierte el campo en obligatorio y una columna anulable queda opcional. Las claves primarias se toman de un PRIMARY KEY a nivel de columna y de un PRIMARY KEY (a, b) a nivel de tabla, incluidas las claves compuestas.
El autoincremento se deduce del DDL, no del nombre de la columna: se reconocen SERIAL, BIGSERIAL, AUTO_INCREMENT, GENERATED … AS IDENTITY y un valor por defecto nextval(…), mientras que un PRIMARY KEY normal se deja como clave corriente. DEFAULT CURRENT_TIMESTAMP y now() se traducen al valor «now» propio de cada destino. Las claves externas se leen tanto de REFERENCES a nivel de columna como de las cláusulas CONSTRAINT … FOREIGN KEY de tabla. Los comentarios de línea (-- y # de MySQL) y de bloque se eliminan antes de analizar.
Prisma: un modelo por tabla con @id, @@id([...]) cuando la clave abarca varias columnas, @default(autoincrement()) solo donde el DDL lo declara, @default(now()) para marcas de tiempo actuales, @db.Uuid para columnas UUID y @map / @@map para que los nombres generados sigan apuntando a los nombres SQL originales.
Drizzle ORM: declaraciones pgTable escritas para el dialecto de Postgres, con primaryKey({ columns: [...] }) en claves compuestas. TypeORM: @PrimaryGeneratedColumn solo en columnas autoincrementales y @PrimaryColumn en el resto de claves, de modo que los decoradores reflejen el esquema. SQLAlchemy: clases DeclarativeBase al estilo 2.0 con anotaciones Mapped[...], mapped_column() y ForeignKey('tabla.columna') para las dos formas de declarar claves externas; la lista de importaciones solo incluye lo que usan los modelos.
La correspondencia de tipos es deliberadamente gruesa. varchar, char, text y citext se convierten al tipo de cadena del destino, DECIMAL y NUMERIC a una columna decimal anotada como Decimal, JSON, JSONB y XML al tipo JSON genérico, y cualquier tipo desconocido cae en string. Compara una tabla representativa con el esquema real antes de generar migraciones a partir del resultado.
Todo lo que no es una columna se queda en la base de datos: CHECK, UNIQUE, índices, vistas, disparadores, secuencias, intercalaciones y cláusulas de almacenamiento no se convierten, y ningún destino recibe propiedades de relación ni de navegación: una clave externa sigue siendo una columna normal en todos salvo en SQLAlchemy, que añade ForeignKey. La salida de Drizzle usa el dialecto de Postgres sea cual sea el dialecto del DDL pegado.