Este ejercicio está diseñado para aprender a utilizar Peewee, un ORM (Object-Relational Mapping) ligero para Python, para gestionar una base de datos SQLite de infraestructura de red.
El alumno deberá crear 4 scripts de Python que cubran el ciclo de vida de los datos (CRUD: Create, Read, Update, Delete) de una tabla de Puntos de Acceso (Access Points).
- Asegúrate de tener instalado Peewee en tu entorno virtual (
venv). - Mantén los archivos en la misma carpeta para que las importaciones funcionen correctamente.
El primer paso es definir la estructura de nuestra base de datos.
- Tarea: Define una base de datos SQLite llamada
red_corporativa.db. - Modelo: Crea una clase
PuntoAccesocon los siguientes campos:hostname: Texto único de máximo 50 caracteres.ip: Texto único (máximo 15 caracteres).planta: Entero.activo: Booleano (por defectoTrue).
- Acción: El script debe conectar a la base de datos y crear la tabla.
Una vez creada la tabla, debemos poblarla con información.
- Tarea: Importa el modelo
PuntoAcceso. - Acción: Implementa tres formas de insertar datos (e inserta datos de prueba):
- Creando una instancia y llamando a
.save(). - Usando el método de clase
.create(). - Usando
.insert_many()para una lista de diccionarios.
- Creando una instancia y llamando a
Aprenderemos a modificar datos existentes.
- Tarea: Busca un punto de acceso por su
hostname(que tenga estado activo), y cambia su estado a inactivo (activo = False). - Acción Adicional: Realiza una actualización masiva (ej. mover todos los APs de una planta a otra) usando el método
.update().
Por último, gestionaremos el borrado de datos.
- Tarea: Elimina un registro específico usando
.delete_instance(). - Tarea: Elimina registros que cumplan una condición (ej. todos los que estén inactivos) usando
.delete().where(...).
- Orden de ejecución: Debes ejecutar
create.pyobligatoriamente antes que los demás para que la base de datos exista. - Commits en DB: Recuerda que en Peewee, si modificas un objeto manualmente, debes llamar a
.save()para que los cambios se guarden en el archivo.db. - DoesNotExist vs None: Aprender la diferencia entre
.get()(lanza excepción si falla) y.get_or_none()(manejable con unif). - Idempotencia: El script
create.pyno debe intentar crear la tabla si esta ya existe. Un buen script debe poder ejecutarse varias veces sin fallar.