14. Listas con Diccionarios y Bases de Datos.

14.1. ¿Por que Lista con Diccionarios?

Informativo

Vamos a tratar de mostrar el por que queremos crear Listas que contienen Diccionarios, no es para complicar la vida de nadie.

Los datos se guardan en algo que se conoce como Base de Datos. Las Bases de Datos están formadas por Tablas, que se relacionan. Vemos el siguiente ejemplo:

Un alumno desde el sistema completa sus datos en la tabla: 

Alumnos, los cuales son:

  1. dni
  2. nombre
  3. carrera que cursa

En campos como nombre el usuario puede introducir diferentes valores.
En cambio, para el campo correspondiente a la carrera queremos restringir las opciones a un conjunto de carreras previamente existentes en el sistema.
NO puede almacenar en el campo nombre de carrera, cualquier carrera. 
Para evitar eso y LIMITAR solamente a las carreras posibles en OTRA TABLA, se cargan las carreras posibles, esto último NO lo hace el alumno, el alumno SOLO elije una de las carreras cargadas en la tabla de Carreras.
Esto Gráficamente se vería como:
 
 
 
Veamos de otra forma las tablas.
Esta sería la tabla Carreras que NO la carga el alumno, en la tabal de Carreras se cargan las posibles carreras y  cada carrera ( registro) tiene un indice.
 
Y esta sería la tabla Alumnos , cada registro de cada alumno tiene un índice:
 
 
En una lista de Python, cada elemento tiene una posición identificada por un índice: 0, 1, 2, etc.
En una tabla de una base de datos normalmente existe un campo identificador, por ejemplo id_alumno o indica. Aunque visualmente puede parecerse al índice de una lista, no son lo mismo.
El índice de la lista indica una posición; el identificador de la base de datos es un dato que permite identificar de manera única a un registro.
 
Luego tenemos "claves" como ser nombre_alumno y nombre_carrera, y sus valres, que serían equivalentes a un diccionario.
Podemos representar cada registro de una tabla mediante un diccionario de Python. 
 
Por Ejemplo:
alumno = {
    "dni": 12345678,
    "nombre": "Juan Pérez",
    "carrera": "Ing. Civil"
}
 
Y una tabla podría representarse provisionalmente como:
alumnos = [
    {"dni": 12345678, "nombre": "Juan Pérez", "carrera": "Ing. Civil"},
    {"dni": 23456789, "nombre": "Ana Peralta", "carrera": "Ing. Mecatrónica"}
]
Se deja al alumno pensar sobre esta prgunta:
 
¿Por qué guardamos id_carrera=1 y no "Ing. Civil" dentro de cada alumno?
 
Las asociaciones podrían ser aproximadamente: 
 
Python Base de datos
Lista Tabla, aproximadamente
Diccionario Registro/fila, aproximadamente
Clave del diccionario Nombre de columna/campo
Valor del diccionario Valor almacenado en la celda
 
Recordemos la salida del Código anterior:
 
 
Imposible negar las similitudes :-).
 
Esta relación entre las Bases de Datos y las Listas con Diccionarios, hace que sea importante saber como completar una lista que tenga con valores los diccionarios.