Skip to content

mrodara/docker_bbdd_python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🐳 Docker MySQL + Python - Proyecto de Acceso a Datos

Proyecto de ejemplo para gestionar una base de datos MySQL usando Docker y Python con el conector mysql-connector-python. Incluye phpMyAdmin para la administración visual de la base de datos.

📋 Descripción

Este proyecto demuestra cómo:

  • Configurar un entorno MySQL con Docker Compose
  • Inicializar automáticamente una base de datos con datos de ejemplo
  • Conectarse a MySQL desde Python
  • Realizar operaciones CRUD (Create, Read, Update, Delete) en la base de datos
  • Administrar la base de datos visualmente con phpMyAdmin

🏗️ Estructura del Proyecto

.
├── database/
│   ├── db_connection.py    # Script Python con funciones CRUD
│   └── init_db.sql         # Script de inicialización de la BD
├── docker-compose.yaml     # Configuración de servicios Docker
├── .env                    # Variables de entorno (no incluido en Git)
├── .gitignore             
└── README.md

🚀 Requisitos Previos

Antes de comenzar, asegúrate de tener instalado:

⚙️ Configuración Inicial

1. Clonar el Repositorio

git clone https://github.com/mrodara/docker_bbdd_python.git
cd docker_bbdd_python

2. Crear el Archivo .env

Crea un archivo .env en la raíz del proyecto con las siguientes variables:

# Configuración MySQL
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=inventario
MYSQL_USER=test
MYSQL_PASSWORD=test

# Configuración phpMyAdmin
PMA_HOST=db
PMA_PORT=3306

⚠️ Importante: El archivo .env contiene información sensible y no debe ser incluido en el control de versiones.

3. Crear Entorno Virtual de Python (Opcional pero Recomendado)

python3 -m venv .venv
source .venv/bin/activate  # En Windows: .venv\Scripts\activate

4. Instalar Dependencias de Python

pip install mysql-connector-python

🐳 Levantar los Servicios con Docker Compose

Iniciar los Contenedores

docker-compose up -d

Este comando:

  • Descarga las imágenes de MySQL 8.0 y phpMyAdmin (si no están descargadas)
  • Crea y arranca los contenedores en segundo plano (-d)
  • Ejecuta automáticamente el script init_db.sql para crear la tabla productos con datos iniciales
  • Configura una red personalizada net-mysql con subnet 192.168.100.0/24

Verificar que los Servicios Están Corriendo

docker-compose ps

Deberías ver algo similar a:

NAME          IMAGE                    STATUS         PORTS
mysql         mysql:8.0                Up             0.0.0.0:3306->3306/tcp
phpmyadmin    phpmyadmin/phpmyadmin    Up             0.0.0.0:8080->80/tcp

Ver los Logs

# Ver logs de todos los servicios
docker-compose logs

# Ver logs de MySQL
docker-compose logs db

# Ver logs en tiempo real
docker-compose logs -f

🌐 Acceder a los Servicios

phpMyAdmin (Interfaz Web)

Abre tu navegador y accede a:

http://localhost:8080

Credenciales de acceso:

  • Servidor: db
  • Usuario: test (o root para acceso completo)
  • Contraseña: test (o root_password para root)

MySQL (Conexión Directa)

Puedes conectarte directamente a MySQL usando cualquier cliente:

mysql -h localhost -P 3306 -u test -p
# Contraseña: test

O desde Python usando el script incluido:

python database/db_connection.py

💻 Uso del Script Python

El archivo database/db_connection.py incluye funciones para interactuar con la base de datos:

Funciones Disponibles

1. Insertar un Producto

insertar_producto(conn, cursor, 'Laptop Gamer', 3, 1800.00)

2. Insertar Múltiples Productos

lista_productos = [
    ('Teclado Mecánico', 10, 75.50),
    ('Monitor Curvo', 5, 350.00),
    ('Ratón Gaming', 20, 45.99)
]
insertar_multiples_productos(conn, cursor, lista_productos)

3. Modificar Precio

modificar_precio(conn, cursor, 'Teclado Mecánico', 50.65)

4. Eliminar Producto

eliminar_producto(conn, cursor, 6)  # Elimina el producto con id=6

Ejecutar el Script

# Asegúrate de que el entorno virtual está activado
source .venv/bin/activate

# Ejecuta el script
python database/db_connection.py

🗄️ Estructura de la Base de Datos

Tabla: productos

Campo Tipo Descripción
id INT Clave primaria (auto-increment)
nombre VARCHAR(255) Nombre del producto
cantidad INT Cantidad en inventario
precio DECIMAL(10,2) Precio del producto

Datos Iniciales

El script init_db.sql inserta automáticamente 3 productos de ejemplo:

INSERT INTO productos (nombre, cantidad, precio) VALUES
('Producto 1', 10, 10.0),
('Producto 2', 20, 20.0),
('Producto 3', 30, 30.0);

🛠️ Comandos Útiles de Docker Compose

Detener los Servicios

docker-compose stop

Detener y Eliminar los Contenedores

docker-compose down

Detener y Eliminar Contenedores + Volúmenes (⚠️ Borra todos los datos)

docker-compose down -v

Reiniciar los Servicios

docker-compose restart

Reconstruir las Imágenes

docker-compose up -d --build

Acceder al Contenedor de MySQL

docker exec -it mysql bash

Una vez dentro del contenedor:

mysql -u root -p
# Contraseña: root_password

🔧 Solución de Problemas

Error: "Port 3306 is already in use"

Si tienes MySQL instalado localmente, puede estar usando el puerto 3306. Soluciones:

  1. Detener MySQL local:

    sudo service mysql stop  # Linux
    brew services stop mysql  # macOS
  2. Cambiar el puerto en docker-compose.yaml:

    ports:
      - "3307:3306"  # Usa el puerto 3307 en tu máquina

Error: "Access denied for user"

Verifica que las credenciales en DB_CONFIG (archivo Python) coincidan con las del archivo .env.

La Base de Datos No Se Inicializa

Si el script init_db.sql no se ejecuta:

  1. Elimina el volumen y vuelve a crear los contenedores:
    docker-compose down -v
    docker-compose up -d

Error: "Not all parameters were used in the SQL statement"

Asegúrate de usar %s como placeholder en las consultas SQL, no ?:

# ✅ Correcto (MySQL)
sql = "INSERT INTO productos (nombre, cantidad, precio) VALUES (%s, %s, %s)"

# ❌ Incorrecto (SQLite)
sql = "INSERT INTO productos (nombre, cantidad, precio) VALUES (?, ?, ?)"

📚 Recursos Adicionales

📝 Licencia

Este proyecto es de código abierto y está disponible bajo la licencia MIT.

👤 Autor

mrodara


⭐ Si este proyecto te ha sido útil, ¡no olvides darle una estrella en GitHub!

About

Infraestructura Docker para pruebas de conexión y CRUD con Python y mysql con phpmyadmin

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages