icono de la entrada de PYTHON

GESTOR DE TAREAS CONSOLA PYTHON.

En esta práctica vamos a crear un gestor de tareas en Python que nos permitirá crear tareas y que guardaremos dentro de una base de datos MySQL.

Creación de datos en base de datos con Python

Lo primero que tienes que tener es una base de datos Mysql que nos sirva de soporte para la tabla y los datos que vamos a guardar. Para esta práctica, yo voy a utilizar dentro de la solución XAMPP.

Crearé una base de datos en Mysql que llamaré base_tareas y dentro de la misma, una tabla llamada tareas que será la que almacene los datos que le pasemos.

Estructura de la base de datos

Conexión a la base de datos.

Siempre que hagamos una conexión a una base de datos, una tabla, un procedimiento, vista, etc., etc., tendremos que hacer la conexión a dicha base de datos contenedora.

La conexión siempre será en Python un objeto del tipo connect, que se inicializará en el inicio del programa.

Utilizaremos la librería mysql.connector-python (que si no está instalada en tu sistema, tendrás que utilizar el gestor de paquetes PIP con la instrucción pip install mysql-connector-python).

La creación del objeto connect, llamará a cuatro parámetros:

● host
● user
● password
● database.

Y gracias a esto ya podemos crear una variable del tipo cursor que nos permitirá guardar la conexión a la base de datos:

import mysql.connector
import os
# Conectar a la base de datos

conexion = mysql.connector.connect(

    host="localhost",
    user="root",
    password="",
    database="base_tareas"
)

cursor = conexion.cursor()

El código anterior es sencillo, utilizo una base de datos de nombre 'base_tareas' para crear el cursor de la base de datos. El cursor es el apuntador que utiliza los datos insertados en el objeto para realizar la conexión a la base de datos y cada vez que se haga una consulta mysql, el cursor, por así decirlo se logueará por ti en la base de datos y realizará la consulta que solicites sin tener que hacerlo tu en vivo.

Ahora que tenemos el cursor, ya podemos hacer la consulta principal en nuestra aplicativo. Dicha consulta va a ser un select que nos cree la tabla tareas si no existe en la base de datos. Esto se hace así para evitar que nos devuelva un error de inserción SQL en el caso de que se nos olvide crear la tabla en la base de datos. Mejor entonces hacer que la tabla se cree automáticamente.

# Crear la tabla si no existe
cursor.execute("CREATE TABLE IF NOT EXISTS tareas (id INT AUTO_INCREMENT PRIMARY KEY, tarea VARCHAR(255), completada BOOLEAN)")

Menú de opciones.

Un menú de opciones nos permite navegar hacia nuestra función específica. En nuestro programa el menú de opciones nos permitirá crear un sistema de navegación de los puntos que queremos hacer para nuestro aplicativo que serán:

● Agregar tareas.
● Mostrar tareas.
● Marcar tarea realizada.
● Eliminar tarea.

Menú principal de la aplicación de consola

Para cada punto del menú haremos una función que realice la tarea específica. Y el menú en cuestión lo haremos siguiendo la estructura básica de Python para realizar menus con el bucle while según el código siguiente:

while True:
print("GESTOR DE TAREAS:\n_________________")
print("1- Agregar tarea.\n2- Mostrar tareas.\n3- Marcar tarea realizada.\n4- Eliminar tarea.")
tarea = int(input("ESCOGE UNA OPCIÓN: "))
if tarea == 1:
    os.system("cls")
    añadir = input("Escribe la nueva tarea: ")
    agregar_tarea(añadir)
elif tarea == 2:
    os.system("cls")
    mostrar_tareas()
    print()
elif tarea == 3:
    os.system("cls")
    tachar = int(input("Selecciona el número de tarea que quiere marcar:"))
    tachar_tarea(tachar)
elif tarea == 4:
    os.system("cls")
    drop = int(input("Elimina la tarea (escoge su número): "))
    eliminar_tarea(drop)
else:
    exit()

El menú está dentro de un bucle While True que hará que mientras se devuelva un True a la hora de escoger la opción correcta en el sistema de menú, siempre se ejecutará el programa y no saldrá del aplicativo. Para salir del programa con pulsar otro número diferente al de cualquier menú, vale para salir.

Agregar tarea.

El primero de los menús que nos permite agregar la tarea y guardarla en la tabla tareas de la base de datos que hemos creado previamente.

def agregar_tarea(tarea):
sql = "INSERT INTO tareas (tarea, completada) VALUES (%s, %s)"
val = (tarea, False)
cursor.execute(sql, val)
conexion.commit()
print("Tarea agregada correctamente.")

Esta primera función te permite insertar en SQL la tarea de Python gracias al cursor que hemos establecido previamente. Simplemente tenemos que pasarle como parámetros del sistema los valores que vamos a utilizar. En este caso solo le pasaremos los valores de tarea y completada porque cuando definimos la tabla tarea en la definición de SQL, establecimos el campo Id como auto increment.

Necesitamos también establecer el estado de la tarea en no completada por defecto, ya que cuando creamos una tarea esta no está completada. De eso se ocupa la variable val. Execute, se encarga de realizar la ejecución de la instrucción SQL en concreto. En este caso le estamos diciendo que ejecute la instrucción definida en la variable sql y ponga a False el valor del campo completada.

Con el commit(), se realiza la acción en cuestión.

Mostrar tareas.

Esta tarea es un simple select de SQL que nos permite establecer los valores almacenados en la tabla de la base de datos. Con ello podemos llamar a cada registro de la tabla y mostrar los campos que queramos:

def mostrar_tareas():
cursor.execute("SELECT * FROM tareas")
tareas = cursor.fetchall()
print("Tareas:")
for tarea in tareas:
    tarea_id, descripcion, completada = tarea
    estado = "Completada" if completada else "Pendiente"
    print(f"{tarea_id}. {descripcion} - {estado}")

Podrás observar que en cada función independiente, estamos hablando de que el cursor será el que realice la acción en cuestión (poniendo entre paréntesis como argumento el valor de la operación SQL). Y en este caso, la función fetchall() se encarga de recorrer cada fila de la tabla específica para devolver cada valor insertado dentro de la tabla.

Para terminar esta función llamo a un bucle for que recorra los valores devueltos por la función fetchall(), para representarlos en la tabla correspondiente.

Tachar tarea.

Esta tarea lo único que hará es marcar como completada la tarea en cuestión.

def tachar_tarea(tarea_id):
sql = "UPDATE tareas SET completada = TRUE WHERE id = %s"
val = (tarea_id,)
cursor.execute(sql, val)
conexion.commit()
print("Tarea marcada como completada.")

Esta función es muy similar a la primera función de select, pero con la diferencia que ahora queremos marcar la tarea como completada.

Eliminar tarea.

La última de las tareas es la eliminar tarea. Para realizar esta acción necesitamos escoger la tarea que queremos eliminar. Para ello vamos a tener en cuenta el id, que es único para cada tarea y de ahí, haremos la eliminación de la tarea según el código siguiente:

def eliminar_tarea(tarea_id):
sql = "DELETE FROM tareas WHERE id = %s"
val = (tarea_id,)
cursor.execute(sql, val)
conexion.commit()
print("Tarea eliminada.")

En cada función del programa cambiamos la síntaxis SQL del aplicativo, pero el desarrollo es muy parecido. En este caso ves que también recurrimos al cursor para realizar la ejecución de la instrucción SQL indicada en la variable sql. Fijate que tanto en la primera función, como en esta última usamos el comodín de %s. Este comodín es para indicar al cursor que el dato que queremos cambiar pertenece a un campo específico de la tabla, y como es un campo que todavía no tiene valor, pues al pasarle este comodín, Python almacena el valor temporal hasta que llame al valor literal de la tabla en cuestión.

Es importante que cuando terminemos cerremos la conexión con la base de datos, ya que se pueden producir errores. Para ello utiliza la variable conexion y el método close().

Te dejo la masterclass del gestor de tareas en consola Python a continuación. Y recuerda que te puedes descargar el código completo desde mi github abajo en el menú de archivos de esta página.

Recuerda compartir esta práctica y ayudar para que siga creciendo como creador de contenido.