Article

Que es un ORM?

Published May 20, 2026 · 3 hours, 35 minutes ago

Gastón Gaitan
Gastón Gaitan
Backend Engineer · May 20, 2026
Que es un ORM?
Qué es un ORM y por qué se usa
⚡ Python · SQL · Backend

Qué es un ORM y por qué se usa

Los ORM permiten trabajar con bases de datos usando objetos y clases en vez de escribir SQL manualmente todo el tiempo. Son una de las herramientas más usadas en backend moderno.

💡 La idea principal

Un ORM traduce objetos de Python a consultas SQL automáticamente.

🚀 La gran ventaja

Permite desarrollar más rápido y escribir menos SQL repetitivo.

📏 Regla práctica

ORM para el 80% del proyecto.
SQL crudo para queries complejas u optimización.

ORM

Qué hace realmente un ORM

Traducción objeto ↔ SQL

El ORM convierte operaciones hechas con objetos Python en consultas SQL reales.

🐍 Mundo Python 🗄️ Mundo SQL
ClaseTabla
ObjetoFila
AtributoColumna
InstanciaRegistro
Método de querySELECT / WHERE
save()INSERT / UPDATE
Idea clave: el ORM no elimina SQL. Simplemente lo genera automáticamente por vos.
Django ORM

Operaciones básicas con Django

CRUD simplificado
models.py

Modelo ORM

La tabla SQL se representa como una clase Python.

from django.db import models


class User(models.Model):
    name = models.CharField(max_length=100)
    age  = models.IntegerField()
    email = models.EmailField(unique=True)
insert.py

INSERT usando ORM

Crear registros sin escribir SQL manualmente.

# ORM
User.objects.create(
    name="Gaston",
    age=25,
)
-- SQL equivalente
INSERT INTO users (name, age)
VALUES ('Gaston', 25);
select.py

SELECT usando ORM

Consultar datos usando objetos.

# ORM
users = User.objects.filter(age__gt=18)
-- SQL equivalente
SELECT * FROM users
WHERE age > 18;
El ORM simplifica muchísimo el CRUD. Por eso casi todos los frameworks modernos incluyen uno.
SQLAlchemy

Ejemplo usando SQLAlchemy

ORM flexible
sqlalchemy_model.py

Modelo SQLAlchemy

Las columnas SQL se definen usando atributos Python.

from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base


Base = declarative_base()


class User(Base):
    __tablename__ = "users"

    id   = Column(Integer, primary_key=True)
    name = Column(String(100))
    age  = Column(Integer)
query.py

Query ORM

Consultas usando métodos Python encadenados.

# ORM
users = (
    session.query(User)
           .filter(User.age > 18)
           .all()
)
-- SQL equivalente
SELECT * FROM users
WHERE age > 18;
Raw SQL

Cuándo se usa SQL crudo

Control total

Aunque uses ORM, muchas veces necesitas escribir SQL manualmente para queries complejas, optimización o reportes avanzados.

raw_sql_django.py

SQL crudo en Django

Ejecutar consultas SQL manuales desde Python.

from django.db import connection


with connection.cursor() as cursor:
    cursor.execute(
        "SELECT * FROM users WHERE age > %s",
        [18],
    )
    rows = cursor.fetchall()
raw_sql_sqlalchemy.py

SQL crudo en SQLAlchemy

SQLAlchemy también permite ejecutar SQL manual.

from sqlalchemy import text


result = session.execute(
    text("SELECT * FROM users WHERE age > :age"),
    {"age": 18},
)
Un ORM no reemplaza SQL. Los buenos backend developers saben usar ambos.
Comparación

ORM vs SQL manual

Diferencias reales

🧩 ORM

  • Más rápido para desarrollar
  • Menos SQL repetitivo
  • Código más mantenible
  • Más fácil de leer
  • Ideal para CRUD común
  • Abstracción de base de datos

⚙️ SQL Manual

  • Control total de la query
  • Más optimización posible
  • Mejor para analytics
  • Queries complejas
  • CTEs y window functions
  • Mayor complejidad

📊 Cuándo conviene cada uno (uso típico en proyectos)

CRUD básico
ORM 95%
Auth / Login
ORM 90%
Joins simples
ORM 80%
Reportes complejos
SQL 75%
Analytics / BI
SQL 90%
Optimización fina
SQL 95%

🎯 Entonces, ¿cuál es la conclusión correcta?

  • ORM Traduce objetos Python a consultas SQL automáticamente.
  • Django Tiene un ORM integrado muy orientado a productividad.
  • SQLAlchemy Es más flexible y separa mejor ORM y SQL.
  • Raw SQL Sigue siendo importante para optimización y queries complejas.
  • Clave Backend fuerte = entender ORM + entender SQL real.