# Ejemplo de base de datos. Sqlite 3. Introducir y visualizar datos.

## Enunciado

Visualizar los datos de la base de datos `Ejemplobasedatos.db`. Introducir los datos de un alumno que se introducirán por tecleado: DNI, Nombre y las notas del primer y segundo parcial de los alumnos de la asignatura Informática para ingeniería. Comprobar que los datos se hayan introducido.

### Ejemplo de la base datos

{% embed url="<https://drive.google.com/open?id=1WHkYnsYkjevIi7R2bHuAt40vwx6wycvU>" %}

## Importar el módulo sqlite3

### Sintaxis

Importar sqlite3

`import sqlite3`

### Visualizar los datos de la base de datos

Se debe conectar con la base de datos, `conectar = sqlite3.connect('`Nombre\_delabase\_de\_datostos.db'), para comprobar que la base de datos existe.

Se debe crear el curso: cursorObj = `conectar.cursor()`

Se debe crear la consulta método "`SELECT * FROM alumnos`"

**Donde:**

`alumnos`=nombre de la tabla.

resultado = cursorObj.`fetchall()`

`Fetchal()`, devuelve los elementos de la tabla que coincidan con la condición.

Se utilizan dos ciclos, para recorrer la matriz, y se visualiza la información en el programa principal.

Cerrar la base de datos, conexion.`close()`

#### Recordar

Utilizar `try/except` para evitar errores en el caso de que no exista la base de datos.

### Sintaxis de la función

```python
def listarTodos(nombre_Base_Datos):    
    #Se crea la variable para que almacene los datos de la base de datos
    print(nombre_Base_Datos)
    datos=""
    try:
        # usamos try por si la base de datos no existe o si el nombre está equivocado
        conexion = sqlite3.connect(nombre_Base_Datos)
        #Se obtiene la conexión
        cursorObj = conexion.cursor()
         # escribe la sentencia SQL que lista todos los datos 
        cursorObj.execute("SELECT * FROM alumnos")
        resultado = cursorObj.fetchall()
        #Se recorre los datos de base de datos para mejorar su visualización
        for fila in resultado:                         
            for i in range(len(fila)):                 
                datos += str(fila[i])+" "           
            datos += "\n"                           
        conexion.close() 

    except:
#        #Mensaje en caso de no existir la base de datos
        datos="Error: base de datos no existente" 

    #Se devuleve los datos o si hubo error de conexión

    return datos
```

### Introducir datos a la tabla de la base de datos

Pedirle los datos al usuario. Y almacenarlos en una l`ista`.

Se debe conectar con la base de datos, `conectar = sqlite3.connect('`Nombre\_delabase\_de\_datostos.db').

Se debe crear un `cursor`, método `execute(INSERT INTO..`.)

cursorObj = `conectar.cursor()`

cursorObj.`execute`(\\'`INSERT INTO` alumnos(dni, nombre, Primer\_parcial, Segundo\_parcial) VALUES(?, ?, ?, ?)\\', lista)

El caracter `'?`\\' indica las posiciones donde se van a sustituir. El segundo parámetro registro es una lista con los datos que se utilizarán en la sustitución.

Cerrar la base de datos, conexion.`close()`

#### Recordar

Utilizar `try/except` para evitar errores en el caso de que no exista la base de datos.

### Código de la función

```python
def insertar(nombre_Base_Datos):

    try:
        #Se abre la base de datos por si hay un error, se utiliza try
        conexion = sqlite3.connect(nombre_Base_Datos)
        print("Se creado con éxito la conexión")
        #Pedir los datos de un alumno
        dni=input("Dame la identificación del alumno")
        nombre=input("dame el nombre")
        primer_parcial=float(input("Dame la calificación del primer parcial"))
        segundo_parcial=float(input("Dame la calificación del segundo parcial"))
        #Crear la lista con los datos que se han introducido
        lista=[]
        lista.append(dni)
        lista.append(nombre)
        lista.append(primer_parcial)
        lista.append(segundo_parcial)
        # obtiene un cursor para ejecutar sentencias y se introduce el dato introducido
        cursorObj = conexion.cursor()
        # escribe la lista de datos en la base de datos
        cursorObj.execute('INSERT INTO alumnos(dni, nombre, Primer_parcial, Segundo_parcial) VALUES(?, ?, ?, ?)', lista)
        #Se consolidan los datos
        conexion.commit()
        # cerramos la conexión con la base de datos
        conexion.close() 
    except: 
        print("Error: base de datos no existente")
```

### Código completo

```
import sqlite3
def insertar(nombre_Base_Datos):
    try:
        #Se abre la base de datos por si hay un error, se utiliza try
        conexion = sqlite3.connect(nombre_Base_Datos)
        print("Se creado con éxito la conexión")
        #Pedir los datos de un alumno
        dni=input("Dame la identificación del alumno")
        nombre=input("dame el nombre")
        primer_parcial=float(input("Dame la calificación del primer parcial"))
        segundo_parcial=float(input("Dame la calificación del segundo parcial"))
        #Crear la lista con los datos que se han introducido
        lista=[]
        lista.append(dni)
        lista.append(nombre)
        lista.append(primer_parcial)
        lista.append(segundo_parcial)
        # obtiene un cursor para ejecutar sentencias y se introduce el dato introducido
        cursorObj = conexion.cursor()
        # escribe la lista de datos en la base de datos
        cursorObj.execute('INSERT INTO alumnos(dni, nombre, Primer_parcial, Segundo_parcial) VALUES(?, ?, ?, ?)', lista)
        #Se consolidan los datos
        conexion.commit()
        # cerramos la conexión con la base de datos
        conexion.close() 
    except: 
        print("Error: base de datos no existente")


#Imprime todos los nombres de la base de dtos  
def listarTodos(nombre_Base_Datos):    
    #Se crea la variable para que almacene los datos de la base de datos
    print(nombre_Base_Datos)
    datos=""
    try:
        # usamos try por si la base de datos no existe o si el nombre está equivocado
        conexion = sqlite3.connect(nombre_Base_Datos)
        #Se obtiene la conexión
        cursorObj = conexion.cursor()
         # escribe la sentencia SQL que lista todos los datos 
        cursorObj.execute("SELECT * FROM alumnos")
        resultado = cursorObj.fetchall()
        #Se recorre los datos de base de datos para mejorar su visualización
        for fila in resultado:                         
            for i in range(len(fila)):                 
                datos += str(fila[i])+" "           
            datos += "\n"                           
        conexion.close() 

    except:
#        #Mensaje en caso de no existir la base de datos
        datos="Error: base de datos no existente" 

    #Se devuleve los datos o si hubo error de conexión

    return datos
#Visualizar todos los datos de la base de datos
print(listarTodos("Ejemplobasedatos.db"))
# Insertar un alumno en la base de datos
insertar("Ejemplobasedatos.db")
#Comprobar la inserción
print(listarTodos("Ejemplobasedatos.db"))
```

## Prueba el código

{% embed url="<https://colab.research.google.com/drive/1qbRPOY-rt0b1FInR3qjand5Ozl_vwbKz>" %}
