ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Python 实战:使用 SQLite 构建一个轻量级任务管理系统

Python 实战:使用 SQLite 构建一个轻量级任务管理系统

前言

很多初学者在学习 Python 数据库操作时,会直接从 MySQL 或 PostgreSQL 开始。但对于个人项目、桌面工具和学习案例来说,SQLite 是一个非常合适的选择。

SQLite 不需要单独安装数据库服务,数据直接保存在一个文件中,Python 也自带sqlite3模块。通过 SQLite,我们可以快速构建一个简单的任务管理系统,掌握数据库连接、建表、增删改查等核心知识。

一、SQLite 的特点

SQLite 是一种轻量级关系型数据库,主要有以下特点:

  • 不需要启动独立服务;
  • 数据保存在单个文件中;
  • 支持标准 SQL;
  • 适合小型应用和本地工具;
  • Python 内置支持。

如果项目访问量较小,或者只是需要保存少量结构化数据,SQLite 可以满足基本需求。当系统规模扩大后,再迁移到 MySQL 或 PostgreSQL 也不迟。

二、连接数据库并创建数据表

首先导入sqlite3:

import sqlite3 connection = sqlite3.connect("tasks.db") cursor = connection.cursor()

然后创建任务表:

cursor.execute(""" CREATE TABLE IF NOT EXISTS tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, status TEXT NOT NULL DEFAULT '未完成', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """) connection.commit() connection.close()

这里定义了四个字段:

  • id:任务编号;
  • title:任务标题;
  • status:任务状态;
  • created_at:创建时间。

IF NOT EXISTS可以避免程序重复运行时再次创建同名表。

三、添加任务

将数据库操作封装成函数:

import sqlite3 def add_task(title): connection = sqlite3.connect("tasks.db") connection.execute( "INSERT INTO tasks (title) VALUES (?)", (title,) ) connection.commit() connection.close()

这里的问号是参数占位符,实际数据通过元组传入。不要直接使用字符串拼接 SQL,例如:

sql = f"INSERT INTO tasks (title) VALUES ('{title}')"

字符串拼接可能造成 SQL 注入问题,使用参数化查询更加安全。

四、查询任务

查询全部任务:

def get_tasks(): connection = sqlite3.connect("tasks.db") cursor = connection.execute(""" SELECT id, title, status, created_at FROM tasks ORDER BY id DESC """) tasks = cursor.fetchall() connection.close() return tasks

调用函数并打印结果:

for task in get_tasks(): print(task)

查询结果通常以元组形式返回,例如:

(1, '学习 Python', '未完成', '2026-09-08 10:00:00')

五、修改和删除任务

将任务标记为已完成:

def finish_task(task_id): connection = sqlite3.connect("tasks.db") connection.execute( "UPDATE tasks SET status = '已完成' WHERE id = ?", (task_id,) ) connection.commit() connection.close()

删除任务:

def delete_task(task_id): connection = sqlite3.connect("tasks.db") connection.execute( "DELETE FROM tasks WHERE id = ?", (task_id,) ) connection.commit() connection.close()

执行更新和删除操作后,必须调用commit(),否则修改不会真正写入数据库。

六、封装数据库连接

如果每个函数都重复编写连接和关闭代码,维护起来会比较麻烦。可以定义一个上下文管理器:

from contextlib import contextmanager import sqlite3 @contextmanager def get_connection(): connection = sqlite3.connect("tasks.db") try: yield connection connection.commit() except Exception: connection.rollback() raise finally: connection.close()

使用方式:

def add_task(title): with get_connection() as connection: connection.execute( "INSERT INTO tasks (title) VALUES (?)", (title,) )

这样可以自动提交事务,也能在发生异常时回滚数据。

七、制作命令行任务系统

下面实现一个简单的命令行菜单:

def main(): while True: print("\n1. 添加任务") print("2. 查看任务") print("3. 完成任务") print("4. 删除任务") print("5. 退出") choice = input("请选择操作:") if choice == "1": title = input("请输入任务内容:") add_task(title) print("任务添加成功") elif choice == "2": tasks = get_tasks() if not tasks: print("暂无任务") else: for task in tasks: print( f"{task[0]}. {task[1]} " f"[{task[2]}] {task[3]}" ) elif choice == "3": task_id = int(input("请输入任务编号:")) finish_task(task_id) print("任务已完成") elif choice == "4": task_id = int(input("请输入任务编号:")) delete_task(task_id) print("任务删除成功") elif choice == "5": print("程序退出") break else: print("无效选项")

实际使用时,还需要对int(input())进行异常处理,避免用户输入非数字导致程序崩溃。

八、项目优化方向

这个任务管理系统还可以继续完善:

  1. 增加任务优先级;
  2. 增加截止日期;
  3. 支持按状态筛选;
  4. 支持模糊搜索;
  5. 增加用户登录功能;
  6. 使用 Tkinter 制作图形界面;
  7. 使用 FastAPI 提供 Web 接口。

通过不断扩展功能,可以将它逐渐发展为一个完整的小型项目。

总结

SQLite 是学习数据库编程的理想工具。它结构简单、使用方便,特别适合个人项目和 Python 入门实践。

本文实现了一个任务管理系统,涵盖了数据库连接、数据表创建、插入、查询、修改、删除和事务处理等基本知识。掌握这些内容后,可以进一步学习 ORM 框架,例如 SQLAlchemy,将数据库操作封装得更加简洁。

学习数据库的重点不只是记住 SQL 语句,更要理解数据结构、事务和安全性。只有把数据库知识应用到实际项目中,才能真正提升开发能力。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进