================
== Pythonisas ==
================
Brujas del teclado. Alquimistas de los bits.

Práctica 3.1 — Modelando bases de datos SQLite con Python

prácticas

Descripcion

Queremos construir el prototipo de una aplicacion que ayude a la gestion del dia a dia de una Escuela.

El programa debera crear una base de datos SQLite con dos tablas relacionadas:

TABLA profesores

idnombreasignatura
1Pedro GarciaMatematicas
2Laura MartinezFisica
3Jose RodriguezQuimica

TABLA alumnos

idnombreedadid_profesor
1Carlos Perez201
2Ana Lopez222
3Luis Fernandez213

Observa que id_profesor en la tabla alumnos es una clave foranea (FOREIGN KEY) que referencia al id de la tabla profesores. Asi se establece la relacion entre ambas tablas.


Objetivo

Completa el fichero crud_incompleto_sqlite.py (renombralo a crud_sqlite.py) de tal forma que:

  • Conecte a una base de datos SQLite llamada dam.db
  • Cree las tablas profesores y alumnos con la estructura indicada arriba
  • Inserte los datos de ejemplo en ambas tablas
  • Consulte los datos haciendo un JOIN entre ambas tablas y los muestre por pantalla

Punto de partida: el fichero incompleto

Este es el esqueleto del programa que se te proporciona. Los huecos marcados con ... y __ son las partes que tu debes completar:

#!/usr/bin/env python3
"""
PRACTICA3.1: Accediendo a bases de datos
Este es un CRUD (Create, Read, Update, Delete) incompleto.
El acceso a SQLite desde Python (CREATE + READ) requiere que tu
completes algunas partes del codigo para que realmente funcione :
"""

import __
import __


def conectar():
    ...
    ...

def crear_tablas(conn)
    ...
    ...


def insertar_datos(conn)
   """
   funcion que imprime los datos de la base de datos en la terminal
   """

def consultar(__):

def main():
   """
   funcion PROGRAMA principal
   """
    ...
    try:
        ...
        ...
    ...


if __name__ == "__main__":
    main()

Pistas

  • Python incluye el modulo sqlite3 en su biblioteca estandar (no necesitas instalar nada)
  • El modulo pathlib te sera util para trabajar con rutas de archivos
  • Para relacionar alumnos con profesores necesitaras un JOIN en tu consulta SQL
  • Usa try...finally para asegurarte de que la conexion se cierra siempre, incluso si hay errores
  • Investiga cursor.execute() y cursor.executemany() — ¿cuando usar cada uno?
  • Puedes inspirarte en el Libro de Python

Salida esperada

Al ejecutar tu programa, la salida debe ser similar a esta:

$ python3 crud_sqlite.py
Hello and welcome!

Conexion establecida: /home/.../PRACTICA3.1-accediendo-a-datos-SQLite/dam.db
Tablas creadas exitosamente.
Datos insertados.

Alumnos y sus profesores:
  Alumno: Carlos Perez | Profesor: Pedro Garcia
  Alumno: Ana Lopez | Profesor: Laura Martinez
  Alumno: Luis Fernandez | Profesor: Jose Rodriguez

Conexion cerrada.

Entrega


BONUS — CRUD completo (para nota maxima)

La practica base solo cubre la C (Create) y la R (Read) del acronimo CRUD. Si quieres ir a por el 10, amplia tu programa para que tambien implemente:

LetraOperacionSQLEjemplo
CCreateINSERT INTOYa implementado
RReadSELECT ... JOINYa implementado
UUpdateUPDATE ... SET ... WHERECambiar la asignatura de un profesor
DDeleteDELETE FROM ... WHEREEliminar un alumno por su nombre

Sugerencia para el BONUS:

  • Implementa una funcion actualizar_profesor(conn, id, nueva_asignatura) que modifique la asignatura de un profesor
  • Implementa una funcion eliminar_alumno(conn, nombre) que borre un alumno de la base de datos
  • Muestra por pantalla el estado de las tablas antes y despues de cada operacion para verificar que funciona

Rubrica de evaluacion

CriterioPuntosDescripcion
Conexion a la BD1El programa conecta correctamente a dam.db usando sqlite3
Creacion de tablas2Se crean las tablas profesores y alumnos con los campos y tipos correctos, incluyendo la clave foranea
Insercion de datos2Se insertan los datos de ejemplo correctamente en ambas tablas
Consulta con JOIN2Se realiza un SELECT con JOIN que relaciona alumnos con sus profesores y se muestran los resultados formateados
Gestion de conexion1Se usa try...finally (o similar) para garantizar el cierre de la conexion
Codigo limpio1El codigo esta organizado en funciones, es legible y sigue buenas practicas Python
BONUS: Update+0.5Implementa correctamente la operacion de actualizacion
BONUS: Delete+0.5Implementa correctamente la operacion de borrado

Practica base (C + R)9
Con BONUS completo (CRUD)10

“Las bases de datos son como los armarios: si no los organizas bien desde el principio, luego no encuentras nada.”