Guías

¿Qué es un ORM? Cómo las apps hablan con las bases de datos, explicado

Un ORM (mapeador objeto-relacional) es una librería de código que se sitúa entre una app y una base de datos relacional. En lugar de escribir consultas de base de datos en SQL, los desarrolladores trabajan con los datos como objetos normales de su lenguaje de programación —db.booking.create(...) o Booking.find(...)— y el ORM traduce eso a SQL, lo ejecuta y convierte los resultados de nuevo en objetos. Ejemplos populares son Prisma y Drizzle para TypeScript, SQLAlchemy para Python y Entity Framework Core para C#.

Por qué importan los ORM cuando creas con IA

Cuando un creador de apps con IA añade una base de datos a tu app, normalmente también añade un ORM para comunicarse con ella. No tendrás que escribir código de ORM, pero conviene saber que está ahí:

  • Tu modelo de datos vive en el código. El archivo de esquema del ORM suele ser la descripción más clara de los datos de tu app: qué tablas existen, qué campos tiene cada una y cómo se conectan. Leerlo es una forma rápida de comprobar que la IA entendió tu app.
  • Los cambios en la base de datos pasan por migraciones. Cuando pides «añade un número de teléfono a los clientes», la IA actualiza el modelo y crea una migración. Saber esto te ayuda a entender por qué un cambio podría necesitar aplicarse antes de funcionar en producción.
  • Seguridad por defecto. Los ORM construyen las consultas de forma que protegen frente a la inyección SQL, uno de los agujeros de seguridad más habituales en las apps que montan las consultas a mano.
  • Trampas de velocidad. Los ORM facilitan lanzar sin querer cientos de consultas pequeñas donde bastaría una. Es una causa frecuente de páginas lentas en apps creadas con IA.

Una analogía cotidiana

Imagina a un viajero británico y a un tendero japonés que no comparten idioma y se entienden a través de un intérprete.

El viajero (tu app) dice: «Quisiera los tres tés más baratos que tengan». El intérprete (el ORM) lo convierte en japonés preciso (SQL), se lo pasa al tendero (la base de datos) y traduce la respuesta de vuelta al inglés.

El viajero nunca aprende japonés, y para la mayoría de conversaciones eso está bien. Pero para una negociación complicada puede ayudar hablar directamente, por eso la mayoría de ORM permiten escribir SQL puro cuando hace falta.

Cómo funciona un ORM

Bases de datos como Postgres guardan los datos en tablas de filas y columnas, y se consultan con SQL. Los lenguajes de programación trabajan con objetos: una reserva con una date, un customer y un status. El ORM relaciona unos con otros:

Lado de la base de datosLado del ORM / código
Tabla bookingsModelo Booking
FilaUn objeto de reserva
Columna starts_atCampo startsAt
Clave foránea customer_idRelación booking.customer
SELECT, INSERT, UPDATE, DELETEMétodos find, create, update, delete

Estas cuatro operaciones son las acciones CRUD sobre las que se construye casi cualquier app.

Un ejemplo práctico: reservas con Prisma

Aquí tienes un esquema simplificado de Prisma para una app de reservas de un salón de belleza. Describe dos tablas y cómo se relacionan:

model Customer {
  id       Int       @id @default(autoincrement())
  name     String
  email    String    @unique
  bookings Booking[]
}

model Booking {
  id         Int      @id @default(autoincrement())
  startsAt   DateTime
  service    String
  customer   Customer @relation(fields: [customerId], references: [id])
  customerId Int
}

En palabras sencillas: un cliente tiene un nombre, un email único y muchas reservas; cada reserva tiene una hora de inicio, un servicio y pertenece a un solo cliente.

Ahora la app necesita «las próximas reservas de Lena, la más cercana primero»:

const bookings = await db.booking.findMany({
  where: {
    customer: { email: "lena@example.com" },
    startsAt: { gte: new Date() },
  },
  orderBy: { startsAt: "asc" },
});

El ORM lo convierte en SQL más o menos así, lo ejecuta y devuelve una lista de objetos de reserva:

SELECT b.* FROM "Booking" b
JOIN "Customer" c ON c.id = b."customerId"
WHERE c.email = $1 AND b."startsAt" >= $2
ORDER BY b."startsAt" ASC;

Los $1 y $2 son marcadores de posición: el email y la fecha se envían por separado del texto de la consulta, y eso es lo que evita la inyección SQL.

Migraciones

Si después pides «que los clientes puedan añadir un número de teléfono», la IA añade phone String? al modelo Customer (el ? indica que es opcional) y genera una migración: un pequeño script SQL como ALTER TABLE "Customer" ADD COLUMN "phone" TEXT;. Las migraciones se guardan en orden, así que cualquier copia de la base de datos se puede llevar a la misma estructura, y se conserva el historial de cambios.

ORM comunes por lenguaje

LenguajeORM habituales
TypeScript / JavaScriptPrisma, Drizzle, TypeORM, Sequelize
PythonSQLAlchemy, ORM de Django, SQLModel
C#Entity Framework Core
JavaHibernate (a menudo con Spring Data JPA)
RubyActive Record

Los ORM varían en cuánto ocultan el SQL. Prisma usa su propio lenguaje de esquema y estilo de consulta; Drizzle se mantiene deliberadamente cerca de la forma del SQL y todo está tipado. Herramientas más ligeras llamadas constructores de consultas, como Knex o Kysely para TypeScript, ayudan a construir SQL en el código sin convertir las filas en objetos completos.

Términos clave

TérminoSignificado
ModeloLa definición en código de una tabla y sus campos.
EsquemaLa descripción completa de todas las tablas, campos y relaciones.
RelaciónUn enlace entre modelos, como una reserva que pertenece a un cliente.
MigraciónUn script versionado que cambia la estructura de la base de datos.
Constructor de consultasUna herramienta más ligera para construir SQL en código sin el mapeo completo a objetos.
Problema N+1Lanzar una consulta para una lista y otra más por cada elemento; lento a gran escala.
SQL puroSQL escrito a mano, que se usa cuando el ORM estorba.

Ideas erróneas habituales

  • «Un ORM es una base de datos». No lo es. Es un traductor. Sigues necesitando una base de datos como Postgres.
  • «Con un ORM no hace falta entender tus datos». Las tablas mal diseñadas dan problemas igual a través de un ORM. Un buen modelo de datos importa más que la herramienta.
  • «Los ORM siempre son lentos». Las consultas del día a día van bien. La lentitud suele venir de patrones como las consultas N+1 o de índices que faltan, y eso se puede arreglar.
  • «Un ORM significa que nunca hay riesgo de inyección SQL». Los métodos estándar del ORM son seguros, pero el SQL puro en el que se pega texto introducido por el usuario sigue siendo peligroso.
  • «Editar el archivo de esquema cambia la base de datos en producción». Solo cuando se crea una migración y se aplica a esa base de datos.

Qué pedir a tu creador de IA

  • «Enséñame el esquema de la base de datos y explica en lenguaje sencillo cada tabla y cada relación.»
  • «¿Qué ORM usa este proyecto y dónde están las migraciones?»
  • «Antes de cambiar cualquier tabla, dime si se van a ver afectados los datos existentes, y nunca elimines una columna con datos sin preguntarme antes.»
  • «Revisa las páginas más lentas en busca de consultas N+1 y añade índices donde se filtren o ordenen listas.»
  • «Asegúrate de que toda consulta que use datos introducidos por el usuario pase por el ORM o use parámetros, sin SQL montado con cadenas de texto.»

ORM en Mythex

Cuando tu app necesita guardar datos, Mythex añade al proyecto una base de datos Postgres dedicada —pídelo en el chat o usa el comando /database— e inyecta sus datos de conexión en el espacio de trabajo y en la app publicada (Base de datos). Después, el agente escribe el código que lee y guarda tus datos. Si tienes preferencia —«usa Prisma», «usa SQLAlchemy» o «SQL puro, sin ORM»— dilo en el chat. Pídele que te explique el esquema cuando quieras revisar la estructura; puedes leer los archivos en el editor de código. Para ver el panorama completo, consulta qué es una base de datos y SQL vs NoSQL.

Preguntas

¿Qué es un ORM en términos sencillos?

Un ORM (mapeador objeto-relacional) es una librería de código que se sitúa entre tu app y una base de datos relacional. Permite a los desarrolladores leer y guardar datos como objetos normales de su lenguaje de programación, y se encarga de escribir las consultas SQL por detrás.

¿Cuáles son algunos ejemplos de ORM?

Los ORM más comunes son Prisma y Drizzle para TypeScript y JavaScript, SQLAlchemy y el ORM de Django para Python, Entity Framework Core para C#, Hibernate para Java y Active Record en Ruby on Rails.

¿Es mejor un ORM que escribir SQL?

Depende del trabajo. Un ORM hace que las lecturas y escrituras del día a día sean más rápidas de programar, más seguras y más fáciles de cambiar, mientras que el SQL escrito a mano ofrece control total para informes complejos o consultas críticas para el rendimiento. La mayoría de ORM te permiten recurrir a SQL puro cuando lo necesitas.

¿Qué es una migración?

Una migración es un pequeño script versionado que cambia la estructura de la base de datos, por ejemplo para añadir una tabla o una columna. Los ORM pueden generar migraciones a partir de tu modelo de datos, de modo que todas las copias de la base de datos —en un portátil, en pruebas y en producción— acaben con la misma estructura.

Mythex · Pricing · Crea lo que quieras con IA · Plantillas de sitios web y apps · Mythex comparado · Glosario de creación de apps con IA · Herramientas gratuitas para crear apps con IA · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)