In today’s fast-paced world, staying organized and managing tasks effectively is more critical than ever. Whether you’re a developer, a student, or a professional juggling multiple projects, having a reliable task management system can make a world of difference. But what if you could create your own customized task manager with just a bit of Python and SQLite?
Manage your tasks with the terminal :-)
We’re excited to share a Python script that not only helps you add, update, and display tasks but also allows you to delete all tasks with a simple command. Brefaly here’s what script does:
• Create a Task Table: It automatically sets up your SQLite database with the necessary table and columns.
• Add Tasks: It allows you to effortlessly add new tasks, with optional due dates.
• Update Task Status: It enables you to easily update the status of your tasks to monitor your progress.
• Delete All Tasks: It clears all tasks with a confirmation prompt to ensure you don't delete them unintentionally.
• Display Tasks: It lets you view all your tasks in a clean, tabular format
Setting Up the Table
The script begins by creating a table in your SQLite database if it doesn't already exist. It even checks for a due_date column and adds it if it's absent:
def create_table(conn): sql_create_tasks_table = """ CREATE TABLE IF NOT EXISTS tasks ( id integer PRIMARY KEY, task text NOT NULL, status text NOT NULL ); """ c = conn.cursor() c.execute(sql_create_tasks_table) # Check if due_date column exists, if not, add it c.execute("PRAGMA table_info(tasks)") columns = [column[1] for column in c.fetchall()] if 'due_date' not in columns: c.execute("ALTER TABLE tasks ADD COLUMN due_date text") conn.commit()
Adding New Tasks
Adding a task is as simple as calling the add_task function. You can even set a due date:
def add_task(conn, task, due_date=None): sql = ''' INSERT INTO tasks(task, status, due_date) VALUES(?,?,?) ''' cur = conn.cursor() cur.execute(sql, (task, 'Pending', due_date)) conn.commit() return cur.lastrowid
Updating Task Status
Need to mark a task as completed? Just update its status:
def update_task(conn, task_id, status): sql = ''' UPDATE tasks SET status = ? WHERE id = ?''' cur = conn.cursor() cur.execute(sql, (status, task_id)) conn.commit()
Deleting All Tasks
Want a fresh start? You can delete all tasks with a simple command, but don’t worry – it asks for confirmation first:
def delete_all_tasks(conn): sql = 'DELETE FROM tasks' cur = conn.cursor() cur.execute(sql) conn.commit()
Displaying Tasks
See all your tasks neatly listed in the console:
def display_tasks(conn): tasks = select_all_tasks(conn) print("\nAll Tasks:") print("-" * 50) print("ID | Task | Status | Due Date") print("-" * 50) for task in tasks: due_date = task[3] if len(task) > 3 and task[3] else "Not set" print(f"{task[0]} | {task[1]} | {task[2]} | {due_date}") print("-" * 50)
User-Friendly Menu
The script includes a user-friendly menu to interact with your task manager:
def menu(): print("\n1. Add Task") print("2. Update Task Status") print("3. Delete All Tasks") print("4. Exit")
Bringing It All Together
Here’s the main function that ties everything together, providing a seamless user experience:
def main(): database = "todo.db" conn = sqlite3.connect(database) if conn is not None: create_table(conn) else: print("Error! Cannot create the database connection.") return while True: display_tasks(conn) menu() choice = input("Enter choice: ") if choice == '1': task = input("Enter task: ") due_date = input("Enter due date (YYYY-MM-DD) or press Enter to skip: ") due_date = due_date if due_date else None add_task(conn, task, due_date) elif choice == '2': task_id = int(input("Enter task ID to update: ")) status = input("Enter new status (Pending/Completed): ") update_task(conn, task_id, status) elif choice == '3': confirmation = input("Are you sure you want to delete all tasks? (yes/no): ") if confirmation.lower() == 'yes': delete_all_tasks(conn) print("All tasks have been deleted.") elif choice == '4': conn.close() break else: print("Invalid choice! Please try again.")
You can extend this script
• Customizable: Adjust the script to meet your specific task management requirements.
• Educational: Discover how to engage with SQLite databases using Python.
• Efficient: Handle tasks straight from your terminal, eliminating the need for third-party apps.
This script empowers you to manage your tasks efficiently and effectively. Happy coding!
Top comments (0)