Operaciones ORM en Django: CRUD y Relaciones entre Tablas

PyCharm funciona como cliente de bases de datos similar a Navicat:

  1. Acceder mediante Database (esquina superior derecha) o penel inferior
  2. Seleccionar MySQL y configurar conexión
  3. Descargar drivers al primer acceso
  4. Consultar estructura en pestaña Tables
  5. Visualizar datos con doble clic en tablas
  6. Confirmar cambios con commit

Configuración de Django con MySQL

Ajustes en settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'base_datos',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'usuario',
        'PASSWORD': 'clave',
        'CHARSET': 'utf8',
    }
}

Adaptación de pymysql

Agregar en cualquier archivo __init__.py:

import pymysql
pymysql.install_as_MySQLdb()

Operaciones Básicas de ORM

Creación de Modelos

from django.db import models

class Cliente(models.Model):
    nombre = models.CharField(max_length=50)
    email = models.EmailField(unique=True)

Comandos de Migración

python manage.py makemigrations
python manage.py migrate

Modificación de Campos

Añadir nuevo campo con valor predeterminado:

class Cliente(models.Model):
    # Campos existentes...
    telefono = models.CharField(max_length=15, default='000-0000')

Operaciones CRUD

Crear Registros

# Método 1
models.Cliente.objects.create(nombre="Ana", email="ana@ejemplo.com")

# Método 2
nuevo_cliente = models.Cliente(nombre="Carlos", email="carlos@ejemplo.com")
nuevo_cliente.save()

Consultar Datos

clientes = models.Cliente.objects.filter(activo=True)
for cliente in clientes:
    print(cliente.nombre, cliente.email)

Actualizar Registros

# Actualización directa
models.Cliente.objects.filter(id=5).update(email="nuevo@email.com")

# Actualización por objeto
cliente = models.Cliente.objects.get(id=5)
cliente.email = "actualizado@email.com"
cliente.save()

Eliminación de Datos

Eliminación Física

models.Cliente.objects.filter(id=10).delete()

Eliminación Lógica

models.Cliente.objects.filter(id=10).update(activo=False)

Relaciones entre Tablas

Modelos Relacionales

class Editorial(models.Model):
    nombre = models.CharField(max_length=100)
    ciudad = models.CharField(max_length=50)

class Libro(models.Model):
    titulo = models.CharField(max_length=200)
    precio = models.DecimalField(max_digits=6, decimal_places=2)
    editorial = models.ForeignKey(Editorial, on_delete=models.CASCADE)
    autores = models.ManyToManyField('Autor')

class Autor(models.Model):
    nombre = models.CharField(max_length=100)
    perfil = models.OneToOneField('PerfilAutor', on_delete=models.CASCADE)

class PerfilAutor(models.Model):
    telefono = models.CharField(max_length=20)
    sitio_web = models.URLField()

Tipos de Relaciones

  • Uno a Muchos: ForeignKey (Libro-Editorial)
  • Muchos a Muchos: ManyToManyField (Libro-Autor)
  • Uno a Uno: OneToOneField (Autor-PerfilAutor)

Etiquetas: Django ORM MySQL CRUD relaciones-tablas

Publicado el 7-17 16:53