Este documento mapea cada criterio de evaluación con su implementación y ubicación en el proyecto.
| # | Componente | Puntos | Estado | Ubicación | Evidencia |
|---|---|---|---|---|---|
| 1 | FASE I: Queries SQL y Python | 8 | ✅ | sql/queries/, src/fase1/ |
Scripts y código |
| 2 | FASE II: DbContext + ORM framework | 3 | ✅ | src/dbcontext.py |
mysql-connector-python |
| 3 | FASE II: Entity | 3 | ✅ | src/entities/__init__.py |
4 entidades implementadas |
| 4 | FASE II: Model (list) | 3 | ✅ | src/models/data_repository.py |
DataRepository con List |
| 5 | FASE II: Controller (MVC/Router) | 3 | ✅ | src/controllers/sakila_controller.py |
SakilaWorkflowController |
| 6 | Video explicativo (opcional) | 3 | ❌ | Pendiente | - |
10 consultas analíticas implementadas:
- Películas con costo > $15.00
- Join ciudades-países
- Conteo ciudades por país
- Duración promedio por rating
- Búsqueda por patrón (LIKE)
- Inventario por tienda
- Películas tarifa 3-6, duración > 120
- Conteo copias por título
- Países sin ciudades (LEFT JOIN WHERE NULL)
- Máximo costo operativo (subconsulta)
| Servicio | Métodos |
|---|---|
CrudService |
crear_pais(), leer_paises(), crear_ciudad(), leer_ciudades(), actualizar_tarifa_pelicula(), eliminar_ciudad() |
ExportService |
exportar_a_csv(), exportar_a_json(), importar_des_csv(), importar_des_json() |
MetricsService |
calcular_metricas_descriptivas(), calcular_covarianza() |
Ejecución:
pip install -e .
python src/main.py --fase1Archivo: src/dbcontext.py
Framework elegido: mysql-connector-python (conector nativo oficial Oracle)
Componentes implementados:
_conectar()- Método privado para conexiónejecutar_comando()- INSERT/UPDATE/DELETE parametrizadoejecutar_consulta()- SELECT parametrizado
class DbContext:
def __init__(self):
self.host = Config.HOST
self.port = Config.PORT
self.user = Config.USER
self.password = Config.PASSWORD
self.database = Config.DATABASEArchivo: src/entities/__init__.py
Entities implementadas (mapeo 1:1 con tablas DBMS):
| Entity | Campos | Tabla DB |
|---|---|---|
CountryEntity |
country_id, country, last_update | country |
CityEntity |
city_id, city, country_id, last_update | city |
FilmEntity |
film_id, title, rental_rate, length, replacement_cost, etc. | film |
InventoryEntity |
inventory_id, film_id, store_id, last_update | inventory |
Archivo: src/models/data_repository.py
DataRepository implementa:
guardar_pais()→ CountryEntitylistar_paises()→List[CountryEntity]guardar_ciudad()→ CityEntitylistar_ciudades()→List[CityEntity]buscar_pelicula_por_id()→Optional[FilmEntity]listar_peliculas()→List[FilmEntity]actualizar_tarifa_pelicula()→ booleliminar_ciudad_por_id()→ bool
Ejemplo de hidratación:
def listar_paises(self, limite: int) -> List[CountryEntity]:
query = "SELECT ... FROM country ORDER BY country_id DESC LIMIT %s"
filas = self.context.ejecutar_consulta(query, (limite,))
lista_modelos: List[CountryEntity] = []
for f in filas:
lista_modelos.append(CountryEntity(...))
return lista_modelosArchivo: src/controllers/sakila_controller.py
SakilaWorkflowController implementa:
- Creación de entidades en memoria
- Persistencia via Repository
- Hidratación de List
- Modificación de estado y sincronización BD
- Eliminación via capa intermedia
class SakilaWorkflowController:
def __init__(self):
self.context = DbContext()
self.repository = DataRepository(self.context)
def procesar_flujo_completo(self):
# 1. Crear país
pais = CountryEntity(country_id=None, country="Portugal")
self.repository.guardar_pais(pais)
# 2. Forzar duplicado (auditar constraint)
# 3. Hidratar List<CountryEntity>
# 4. Crear ciudad vinculada
# 5. Modificar FilmEntity y sincronizar
# 6. Eliminar via capa intermediaEjecución:
python src/main.py --fase2Estado: Pendiente
Contenido planeado:
- Introducción al proyecto (30s)
- Demostración Fase I (60s)
- Explicación arquitectura ORM (90s)
- Constraints de integridad (45s)
- Conclusiones (45s)
# Instalar paquete
pip install -e .
# Generar evidencias
python src/main.py --fase1 > docs/evidencias/fase1_output.txt
python src/main.py --fase2 > docs/evidencias/fase2_output.txtuasdCrudPython/
├── main.py # Punto de entrada unificado
├── setup.py # Paquete instalable
├── requirements.txt
├── .env # Configuración local
├── src/
│ ├── config.py # Configuración centralizada
│ ├── main.py # Orchestrator + CLI
│ ├── dbcontext.py # DbContext (1 punto)
│ ├── fase1/
│ │ ├── crud_service.py # CRUD operations
│ │ ├── export_service.py # CSV/JSON I/O
│ │ └── metrics_service.py # Métricas descriptivas
│ ├── fase2/
│ │ ├── entities/ # Entities (1 punto)
│ │ ├── models/ # Model List<Entity> (1 punto)
│ │ └── controllers/ # Controller (2 puntos)
│ └── utils/
│ └── helpers.py
├── sql/
│ ├── ddl/
│ ├── dml/
│ └── queries/
├── docs/
│ ├── criterios.md
│ ├── ensayo/
│ └── evidencias/
└── data/