Curso de programación en Python usando Linux. Decimosexta parte
En en artículo anterior de nuestro curso de programación en Python usando Linux hicimos una introducción al tema de las bases de datos SQLite. Este tipo de base de datos son especialmente útiles cuando trabajamos con aplicaciones que trabajan en modo local o que no requieren acceso de más de un usuario a esos datos.
El acceso a la base de datos SQL se hace mediante un módulo llamado SQLite3 que viene incluído con la instalación estandar.
Curso de programación en Python usando Linux
Recordemos algunos conceptos:
- Tabla: Es un conjunto de datos relacionados que se organizan en filas y columnas.
- Filtros: Representa una entrada completa dentro de una tabla en forma de fila.
- Campos: Son las filas y representan atibutos o características de los datos ingresados.
Veamos nuestra tabla del artículo anterior:
| ID distro | Nombre | Derivada de | Escritorio |
|---|---|---|---|
| 1 | Ubuntu | Debian | GNOME |
| 2 | Manjaro | Arch Linux | KDE |
| 3 | Linux Mint | Ubuntu | Cinnamon |
Con este programa vamos a crear una tabla usando Python3 para poder insertar los datos de arriba.
Esta es la explicación línea por línea del programa:
import sqlite3
Con este comando llamamos al módulo que nos va a permitir trabajar con las bases de datos.
DB_NAME = "distros.db"
Le asigna a una constante el nombre de la base de datos. Cuando intenta conectrse, si la base de datos no existe la creará.
def crear_tabla():
Definición de la función para crear la tabla.
with sqlite3.connect(DB_NAME) as con:
Se abre una conexión con la base de datos. El uso de with cierra la conexión de manera adecuada al terminar y que los cambios se confirmen si no hubo errores.
con.execute("""
CREATE TABLE IF NOT EXISTS distros (
Mediante una secuencia en lenguaje SQL se crea la tabla distros tomando la precaución de verificar si no existía previamente.
id_distro INTEGER PRIMARY KEY AUTOINCREMENT,
Se asigna al cambo id_distro La condición de clave primaria siendo un número entero que se autoincrementará.
nombre TEXT NOT NULL,
Al campo nombre se le asigna el caracter de obligatorio y que será de texto.
derivada TEXT,
Indica que el campo derivada será de texto sin ser obligatorio.
escritorio TEXT
Lo mismo que la anterior para el campo escritorio con la salvedad de la falta de coma final. Esto es porque la coma separa campos y es el último de la tabla.
)
""")
Cierra el comando SQL y el método execute()
print("Tabla 'distros' creada correctamente.")
Muestra un mensaje de confirmación de que se creó la tabla.
crear_tabla()
Llama a la función que se ocupa de crear la tabla.
Vamos a agregar los datos a nuestra tabla
El objetivo de este artículo es ilustrar el uso del módulo. Por eso introducimos los datos desde el código usando tuplas en lugar de hacerlo mediante una petición al usuario. Veámoslo más de cerca.
import sqlite3
Llamamos al módulo.
DB_NAME = "distros.db"
Le asignamos a la constante el mismo nombre de la base de datos que creamos con el progrmaa anterior.
def insertar_distros():
Comenzamos la definición de la función.
distros = [
Comenzamos a definir una lista de tuplas
("Ubuntu", "Debian", "GNOME"),
("Manjaro", "Arch Linux", "KDE"),
("LinuxMint", "Ubuntu", "Cinnamon"),
]
Definimos para cada registro una tupla. No es necesario que asignemos la clave numérica porque esta se genera de manera automáica.
with sqlite3.connect(DB_NAME) as con:
Abrimos la conexión con la base de datos creada previamente usando with para que se cierre de la forma adecuada.
con.executemany(
"INSERT INTO distros (nombre, derivada, escritorio) VALUES (?, ?, ?)",
distros
)
Usamos el comando INSERT una vez para cada tupla de la lista distros. Los signos de pregunta cumplen la función de marcadores de posición que van a ser reemplazados por los valores de cada una en orden.
print(f"Se insertaron {len(distros)} registros correctamente.")
Mediante {len(distros)} podemos verificar que todos los registros se insertaron.
insertar_distros()
Llama a la función que inserta los registros.
Veamos ahora los registros que ingresamos
import sqlite3
Llamamos al módulo.
DB_NAME = "distros.db"
Asignamos a la constante el nombre del mósulo a utilizar.
def mostrar_registros():
Definimos la función con la que vamos a mostrar todos los registros.
with sqlite3.connect(DB_NAME) as con:
Conectamos con la base de datos.
filas = con.execute("SELECT * FROM distros").fetchall()
Esta linea ejecuta una consulta SQL que recopila todos los registros y mediante fetchall() los asigna a una lista de tuplas y los guarda en la variable filas.
if not filas:
print("No hay registros en la tabla.")
return
Esto es una precaución para el caso de que no se haya ingresado datos en la base de datos lo informa con un mensaje.
for fila in filas:
Este bucle asigna por turnos cada una de las tuplas de la lista filas a la variable fila.
print(f"ID distro: {fila[0]} | Nombre: {fila[1]} | Derivada de: {fila[2]} | Escritorio: {fila[3]}")
Imprime cada fila indicando la posición que cada uno de sus elementos ocupa dentro de la tupla.
mostrar_registros()
Llama a la función que definimos antes.
El programa que creamos muestra el contenido de todos los registros de la base de datos. Python tiene herramientas que permite presentaciones más activas visualmente pero no la implementé porque es un artículo introductorio.Ahora probemos borrando un registro. Vamos a hacerlo con el de LinuxMint
Analicemos el código más de cerca:
import sqlite3
Importamos el módulo para trabajr con la base de datos.
DB_NAME = "distros.db"
Asignamos el nombre de nuestra base de datos a la constante que usaremos para llamarla.
def eliminar_distro():
Comenzamos la definición de la función.
with sqlite3.connect(DB_NAME) as con:
Iniciamos la conexión con la base de datos.
cur = con.execute("DELETE FROM distros WHERE nombre = ?", ("LinuxMint",))
Cuando el programa ejecuta esta sentencia SQL se elimina el registro que tenga para el campo nombre el atributo LinuxMint. El ? vuelve a usarse como el marcador de posición que se cambia con el valor «LinuxMint» de la tupla. El resultado se guarda en cuR. Cur es el cursor que almacena información sobre la operación realizada.
if cur.rowcount:
Este comando se utiliza para ver si al menos se borró algún registro (Fila) SI el resultado es 0 es porque no se encontró ningún registro.
print("Registro de LinuxMint eliminado correctamente.")
MUestra el aviso de que el registro se eliminó
else:
print("No se encontró el registro de LinuxMint.")
Muestra el mensaje de que el registro no se eliminó
eliminar_distro()
Llama a la función de borrado.
EN el próximo articulo integraremos estas funciones en un solo programa.

