Guía Completa sobre ORM en Django

Django es un framework de desarrollo web en Python que destaca por su eficiencia, flexibilidad y fácil integración con bases de datos. Una de sus características más potentes es el ORM (Object Relational Mapping), que permite interactuar con bases de datos SQL sin tener que escribir directamente consultas SQL. En lugar de eso, se utilizan objetos Python que representan tablas de bases de datos, lo que facilita las operaciones de creación, lectura, actualización y eliminación (CRUD) sin perder rendimiento o seguridad.

¿Qué es el ORM?

El ORM es una técnica de software que nos permite manipular datos en una base de datos de manera más intuitiva, utilizando objetos en lugar de escribir consultas SQL explícitas. Django simplifica esto al permitir que los desarrolladores trabajen con Modelos y QuerySets.

Componentes principales del ORM de Django


1Modelos de Django (Django Models):

Son clases Python que representan las tablas en la base de datos. Cada atributo de la clase representa una columna en la tabla.

python
class Persona(models.Model):
    nombre = models.CharField(max_length=100)
    apellido = models.CharField(max_length=100)
    edad = models.IntegerField()
2QuerySets:

Son objetos que representan una consulta a la base de datos. Se pueden usar para recuperar, crear, actualizar y eliminar registros de la base de datos.

python
personas = Persona.objects.all()

Consultas en Bases de Datos con Django ORM


Una de las principales ventajas del ORM de Django es que nos permite realizar consultas complejas de manera sencilla y sin tener que escribir SQL. A continuación, se presentan algunos ejemplos de cómo usar el ORM para hacer consultas en bases de datos.

1Recuperar toda la información
python
# Django ORM
Personas.objects.all()

# SQL equivalente
SELECT * FROM persona;
2 Filtrar registros por nombre
python
# Django ORM
Personas.objects.filter(nombre='Juan', apellido='Pérez')

# SQL equivalente
SELECT * FROM persona WHERE nombre='Juan' AND apellido='Pérez';
3Filtrar registros usando operadores de búsqueda
python
# Django ORM
Personas.objects.filter(nombre__startswith='J')

# SQL equivalente
SELECT * FROM persona WHERE nombre LIKE 'J%';
4Contar el número de registros
python
# Django ORM
Personas.objects.count()

# SQL equivalente
SELECT COUNT(*) FROM persona;
5Ordenar registros
python
# Django ORM
Personas.objects.order_by('-edad')

# SQL equivalente
SELECT * FROM persona ORDER BY edad DESC;
6Agregación de información (por ejemplo, obtener el valor máximo)
python
# Django ORM
Personas.objects.aggregate(max_edad=Max('edad'))

# SQL equivalente
SELECT MAX(edad) FROM persona;
7Agrupación de información
python
# Django ORM
Personas.objects.annotate(edad_count=Count('edad')).values('edad_count', 'edad')

# SQL equivalente
SELECT edad, COUNT(edad) FROM persona GROUP BY edad;
  Conclusión

El ORM de Django es una herramienta poderosa para interactuar con bases de datos, que permite a los desarrolladores enfocarse en la lógica de negocio sin preocuparse por las complejidades del manejo de SQL.