Contenido del curso

Desarrollo de Aplicaciones en Django

ORM de Django: modelos sin escribir SQL

Resumen

El ORM de Django es la pieza que conecta tus clases de Python con las tablas de tu base de datos sin que tengas que escribir SQL. Si estás aprendiendo el patrón MVT en Django, entender el modelo (la M) es lo que te permite pasar de listas estáticas en la vista a datos reales guardados y consultados desde una base de datos.

Qué es el ORM de Django y por qué importa

El Object Relational Mapper de Django traduce tus clases de Python en tablas relacionales. Tú trabajas con objetos, y Django se encarga de la parte SQL por debajo.

Esto te da dos ventajas concretas: escribes menos código repetitivo y puedes cambiar de motor de base de datos sin reescribir tus consultas. En este curso vas a usar SQLite al inicio y Postgres para el proyecto final, y la lógica de tus modelos se mantiene igual en ambos casos.

¿Qué es un ORM en Django? Es una capa que mapea clases de Python a tablas de base de datos. Tú defines la clase en models.py y Django crea, consulta y modifica la tabla por ti.

Cómo se relacionan las clases de Python con las tablas

Todo empieza en el archivo models.py. Ahí defines clases que representan entidades de tu aplicación, y cada clase se convierte en una tabla.

Imagina que creas una clase Carro con un atributo Title. Esa clase, una vez aplicada a la base de datos, se vuelve una tabla llamada carro con una columna title. Cada instancia de la clase será una fila.

  • La clase vive en tu código Python.
  • La tabla vive en la base de datos.
  • Los atributos de la clase se convierten en columnas.

Este mapeo es el corazón del ORM y lo que te libera de escribir sentencias SQL a mano.

Qué papel juega el archivo models.py

Es el lugar donde declaras la estructura de tus datos. Si tu app maneja carros, usuarios o productos, cada uno tendrá su clase aquí. Django lee este archivo para saber qué tablas necesita crear o modificar.

Cómo funcionan las migraciones en Django

Crear una clase no es suficiente: necesitas avisarle a la base de datos. Para eso existen las migraciones, el mecanismo que Django usa para sincronizar tus modelos con el esquema real de la base.

Cuando corres una migración hacia adelante, Django aplica los cambios que detectó en tus clases. Si creaste la clase Carro con el atributo Title, al migrar hacia adelante aparece la tabla con esa columna.

¿Qué hace una migración en Django? Aplica cambios a la estructura de la base de datos según lo que definiste en tus modelos. Puede crear tablas, agregar columnas o revertir cambios anteriores.

Cuándo usar migraciones hacia adelante o hacia atrás

Las migraciones funcionan en dos direcciones, y ambas son útiles según el escenario.

  • Hacia adelante: aplica los cambios nuevos. Si agregas el campo Año a la clase Carro, al migrar hacia adelante la tabla pasa a tener Title y Año.
  • Hacia atrás: revierte la última migración. Si decides que el campo Año no era necesario, vuelves al estado anterior y la tabla queda solo con Title.
  • Borrado completo: si reviertes todas las migraciones de una clase, la tabla puede eliminarse de la base.

Esta capacidad de avanzar y retroceder te da control sobre la evolución del esquema sin perder trabajo previo.

Por qué el ORM te hace independiente del motor de base de datos

Aquí viene lo interesante: como tú escribes clases de Python y no SQL específico, Django puede generar las sentencias adecuadas para el motor que estés usando. Cambiar de SQLite a Postgres no implica reescribir tus modelos.

¿Puedo usar el mismo modelo en SQLite y Postgres? Sí. El ORM de Django genera el SQL correcto para cada motor, así que tus clases en models.py funcionan igual en ambos.

Eso es lo que vas a comprobar en el proyecto: empiezas con SQLite por su simplicidad y luego migras a Postgres sin tocar la lógica de tus modelos.

¿Ya tienes claro cómo vas a estructurar tu primera clase en models.py? Cuéntame en los comentarios qué entidad piensas modelar primero en tu proyecto.