PyCharm funciona como cliente de bases de datos similar a Navicat:
- Acceder mediante Database (esquina superior derecha) o penel inferior
- Seleccionar MySQL y configurar conexión
- Descargar drivers al primer acceso
- Consultar estructura en pestaña Tables
- Visualizar datos con doble clic en tablas
- 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)