Django

Django

Tutorial Django: Base de datos MySQL en Django

MySQL Instalación y configuración para Django, guía completa para conectar MySQL con tu proyecto web y garantizar una base de datos segura y eficiente.

Aprende Django GRATIS y certifícate

Instalación de MySQL

Para utilizar MySQL como base de datos en un proyecto Django, es necesario instalar el servidor MySQL y configurar un usuario con los permisos adecuados.

En sistemas basados en Ubuntu, abre una terminal y ejecuta los comandos:

sudo apt update
sudo apt install mysql-server

En macOS, se recomienda usar Homebrew para instalar MySQL. Abre la terminal y ejecuta:

brew update
brew install mysql
brew services start mysql

En Windows, descarga el instalador de MySQL desde la página oficial de MySQL. Durante el proceso de instalación, asegúrate de incluir el servidor MySQL y configurar una contraseña segura para el usuario root.

Después de la instalación, es importante realizar la configuración inicial para asegurar el servidor. En Ubuntu y macOS, ejecuta:

sudo mysql_secure_installation

Este script guiará en la configuración de opciones de seguridad, como la validación de contraseñas y la eliminación de usuarios anónimos. En Windows, estas configuraciones suelen realizarse durante el proceso de instalación a través del asistente.

A continuación, accede al shell de MySQL con privilegios de administrador. En Ubuntu y macOS:

sudo mysql -u root -p

En Windows, abre el Command Prompt (CMD) o PowerShell como administrador y ejecuta:

mysql -u root -p

Dentro del shell de MySQL, crea una nueva base de datos y un usuario con permisos específicos:

CREATE DATABASE nombre_base_datos CHARACTER SET UTF8MB4;
CREATE USER 'usuario_django'@'localhost' IDENTIFIED BY 'contraseña_segura';
GRANT ALL PRIVILEGES ON nombre_base_datos.* TO 'usuario_django'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Reemplaza nombre_base_datos, usuario_django y contraseña_segura por valores específicos para tu proyecto, utilizando nombres descriptivos y contraseñas robustas.

Para que Django pueda interactuar con MySQL, es necesario instalar el conector mysqlclient. Asegúrate de estar dentro de tu entorno virtual de Python y ejecuta:

pip install mysqlclient

Este paquete permite a Django establecer una conexión con la base de datos MySQL. Verifica que la instalación se complete sin errores.

Ajuste en settings.py para MySQL

Una vez instalado MySQL y creado el usuario y la base de datos, es necesario configurar el archivo settings.py de tu proyecto Django para establecer la conexión con la base de datos.

Abre el archivo settings.py y localiza el diccionario DATABASES. Debes modificarlo para que utilice el motor de base de datos MySQL en lugar de la configuración por defecto que utiliza SQLite.

La configuración quedaría de la siguiente manera:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'nombre_base_datos',
        'USER': 'usuario_django',
        'PASSWORD': 'contraseña_segura',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

Asegúrate de reemplazar nombre_base_datos, usuario_django y contraseña_segura por los valores que configuraste al crear la base de datos y el usuario en MySQL.

Es importante destacar los siguientes puntos en la configuración:

  • ENGINE: Especifica el backend de la base de datos. Para MySQL, debe ser 'django.db.backends.mysql'.
  • NAME: Indica el nombre de la base de datos que utilizará el proyecto.
  • USER y PASSWORD: Credenciales del usuario de la base de datos con permisos adecuados.
  • HOST y PORT: Dirección y puerto donde se encuentra el servidor de MySQL. Si está en la misma máquina, se utiliza 'localhost' y el puerto predeterminado '3306'.

Además, en la clave OPTIONS, establecemos:

  • charset: Configurado a 'utf8mb4' para soportar emojis y caracteres especiales.
  • init_command: Utilizamos "SET sql_mode='STRICT_TRANS_TABLES'" para asegurar que Django maneje los datos de forma consistente y se apliquen las restricciones de integridad.

Es recomendable utilizar variables de entorno para manejar información sensible como PASSWORD y SECRET_KEY. Puedes hacerlo usando módulos como python-dotenv o configurando las variables directamente en el entorno del sistema operativo.

Ejemplo utilizando os.environ:

import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('DB_NAME', 'nombre_base_datos'),
        'USER': os.environ.get('DB_USER', 'usuario_django'),
        'PASSWORD': os.environ.get('DB_PASSWORD', 'contraseña_segura'),
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

De esta manera, puedes definir las variables de entorno DB_NAME, DB_USER y DB_PASSWORD en tu sistema, evitando que datos sensibles se almacenen en el código fuente.

Si necesitas soporte para conexiones TLS/SSL o configuraciones adicionales, puedes agregar más parámetros dentro de OPTIONS según la documentación oficial de Django y MySQL.

Verificación de la conexión

Después de configurar la conexión a MySQL en settings.py, es esencial verificar que Django interactúa correctamente con la base de datos. Para ello, ejecuta las migraciones iniciales que crean las tablas necesarias para el funcionamiento del framework.

Desde la línea de comandos, en el directorio raíz del proyecto, ejecuta:

python manage.py migrate

Este comando aplicará las migraciones pendientes y creará las tablas en la base de datos MySQL. Si la conexión se establece correctamente, verás una serie de mensajes indicando que las migraciones se han aplicado con éxito.

Si ocurre algún error durante la migración, es posible que haya un problema con la configuración de la base de datos. A continuación, se detallan algunos pasos para resolver posibles incidencias:

  • Verifica que las credenciales (USER y PASSWORD) en settings.py son correctas.
  • Asegúrate de que el servidor MySQL está en funcionamiento y escuchando en el puerto especificado.
  • Comprueba que el usuario tiene los permisos adecuados sobre la base de datos.

Para confirmar que la aplicación funciona correctamente, inicia el servidor de desarrollo de Django:

python manage.py runserver

Abre un navegador web y accede a http://localhost:8000/. Deberías ver la página de inicio predeterminada de Django, lo que indica que la configuración es correcta.

Además, puedes utilizar la shell interactiva de Django para realizar consultas directas a la base de datos. Ejecuta:

python manage.py shell

Luego, en la consola interactiva, intenta importar un modelo y consultar la base de datos:

from django.contrib.auth.models import User
User.objects.all()

Si todo funciona correctamente, obtendrás un QuerySet vacío o con los usuarios existentes, confirmando que la conexión está establecida y operativa.

Es recomendable revisar el archivo de registro (logs) en busca de mensajes de error o advertencias que puedan indicar problemas con la base de datos. Mantener un seguimiento de los logs ayuda a identificar y solucionar inconvenientes.

Finalmente, recuerda que, para proyectos en producción, es vital realizar pruebas exhaustivas y garantizar que la base de datos está optimizada y segura.

Para seguir leyendo hazte Plus

¿Ya eres Plus? Accede a la app

20 % DE DESCUENTO

Plan mensual

19.00 /mes

15.20 € /mes

Precio normal mensual: 19 €
58 % DE DESCUENTO

Plan anual

10.00 /mes

8.00 € /mes

Ahorras 132 € al año
Precio normal anual: 120 €
Aprende Django GRATIS online

Todas las lecciones de Django

Accede a todas las lecciones de Django y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a Django y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  • Instalar MySQL en Ubuntu, macOS y Windows.
  • Configurar usuario y base de datos MySQL.
  • Integrar MySQL con Django mediante settings.py.
  • Verificar la conexión con migraciones y comandos de shell.