Python 连接 SQLite 数据库从建表到增删改查的完整演示项目SQLite 是 Python 新手非常适合上手的数据库它不需要单独安装数据库服务数据直接保存在一个本地.db文件里。Python 标准库内置了sqlite3模块所以只要安装了 Python就可以直接操作 SQLite。这篇文章用一个“小型学生信息管理”项目演示 Python 如何连接 SQLite 数据库并完成建表、插入、查询、更新、删除等常见操作。一、项目目标我们要实现一个简单的学生表students字段如下字段类型说明idINTEGER主键自增nameTEXT学生姓名ageINTEGER年龄majorTEXT专业scoreREAL分数最终项目支持这些功能自动创建数据库和数据表新增学生信息查询全部学生根据 ID 查询单个学生修改学生分数删除学生记录关闭数据库连接二、准备环境确认本机已经安装 Pythonpython--version如果能看到类似下面的输出就可以继续Python3.11.0sqlite3是 Python 标准库不需要额外安装。三、项目结构新建一个目录例如sqlite_crud_demo/ ├── app.py └── student.db其中app.py我们编写的 Python 代码student.db运行程序后自动生成的 SQLite 数据库文件四、完整代码在app.py中写入下面的代码importsqlite3frompathlibimportPath DB_PATHPath(__file__).with_name(student.db)defget_connection():创建并返回数据库连接。connsqlite3.connect(DB_PATH)conn.row_factorysqlite3.Rowreturnconndefcreate_table(conn):创建学生表。sql CREATE TABLE IF NOT EXISTS students ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER NOT NULL, major TEXT NOT NULL, score REAL NOT NULL ); conn.execute(sql)conn.commit()defadd_student(conn,name,age,major,score):新增学生。sql INSERT INTO students (name, age, major, score) VALUES (?, ?, ?, ?); cursorconn.execute(sql,(name,age,major,score))conn.commit()returncursor.lastrowiddeflist_students(conn):查询全部学生。sqlSELECT id, name, age, major, score FROM students ORDER BY id;returnconn.execute(sql).fetchall()defget_student_by_id(conn,student_id):根据 ID 查询学生。sqlSELECT id, name, age, major, score FROM students WHERE id ?;returnconn.execute(sql,(student_id,)).fetchone()defupdate_student_score(conn,student_id,new_score):修改学生分数。sqlUPDATE students SET score ? WHERE id ?;cursorconn.execute(sql,(new_score,student_id))conn.commit()returncursor.rowcountdefdelete_student(conn,student_id):删除学生。sqlDELETE FROM students WHERE id ?;cursorconn.execute(sql,(student_id,))conn.commit()returncursor.rowcountdefprint_students(rows):格式化输出查询结果。ifnotrows:print(暂无学生数据)returnforrowinrows:print(fid{row[id]}, fname{row[name]}, fage{row[age]}, fmajor{row[major]}, fscore{row[score]})defmain():withget_connection()asconn:create_table(conn)print( 新增学生 )alice_idadd_student(conn,Alice,20,Computer Science,92.5)bob_idadd_student(conn,Bob,21,Data Science,88.0)add_student(conn,Cindy,19,Software Engineering,95.0)print(fAlice 的 ID 是{alice_id})print(fBob 的 ID 是{bob_id})print(\n 查询全部学生 )print_students(list_students(conn))print(\n 根据 ID 查询学生 )studentget_student_by_id(conn,alice_id)ifstudent:print(dict(student))print(\n 修改 Bob 的分数 )updated_countupdate_student_score(conn,bob_id,90.5)print(f更新记录数{updated_count})print(\n 修改后再次查询 )print_students(list_students(conn))print(\n 删除 Alice )deleted_countdelete_student(conn,alice_id)print(f删除记录数{deleted_count})print(\n 删除后再次查询 )print_students(list_students(conn))if__name____main__:main()运行程序python app.py第一次运行后当前目录会自动生成student.db文件。五、关键代码讲解1. 连接 SQLite 数据库connsqlite3.connect(DB_PATH)如果student.db已经存在Python 会直接连接它如果文件不存在SQLite 会自动创建。这里还设置了conn.row_factorysqlite3.Row这样查询出来的每一行既可以像元组一样访问也可以通过字段名访问row[name]row[score]这对新手更直观。2. 创建数据表CREATETABLEIFNOTEXISTSstudents(idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTNOTNULL,ageINTEGERNOTNULL,majorTEXTNOTNULL,scoreREALNOTNULL);IF NOT EXISTS的作用是如果表已经存在就不会重复创建也不会报错。id INTEGER PRIMARY KEY AUTOINCREMENT表示id是主键并且会自动递增。3. 新增数据sql INSERT INTO students (name, age, major, score) VALUES (?, ?, ?, ?); conn.execute(sql,(name,age,major,score))conn.commit()注意这里没有把变量直接拼接到 SQL 字符串里而是使用了?占位符。推荐写法conn.execute(sql,(name,age,major,score))不推荐写法sqlfINSERT INTO students (name) VALUES ({name})原因是字符串拼接容易引发 SQL 注入问题也容易因为引号、特殊字符导致 SQL 执行失败。4. 查询数据查询全部学生rowsconn.execute(SELECT * FROM students).fetchall()查询单个学生rowconn.execute(SELECT * FROM students WHERE id ?,(student_id,)).fetchone()这里(student_id,)后面的逗号不能省略。它表示这是一个只包含一个元素的元组。5. 修改数据sqlUPDATE students SET score ? WHERE id ?;cursorconn.execute(sql,(new_score,student_id))conn.commit()cursor.rowcount可以拿到受影响的行数returncursor.rowcount如果返回1说明成功修改了一条记录如果返回0说明没有找到对应 ID 的学生。6. 删除数据sqlDELETE FROM students WHERE id ?;cursorconn.execute(sql,(student_id,))conn.commit()删除操作也要记得调用commit()否则修改不会真正保存到数据库文件。六、commit 为什么重要SQLite 的插入、修改、删除都属于写操作。执行写操作后需要调用conn.commit()如果不提交事务程序结束后数据可能不会保存。常见规律SELECT查询不需要commit()INSERT新增需要commit()UPDATE修改需要commit()DELETE删除需要commit()七、使用 with 自动管理连接示例代码里使用了withget_connection()asconn:create_table(conn)这样可以让数据库连接的生命周期更清晰。代码块执行完成后连接会被正确处理。对于小型脚本来说这种写法简单、直观也能减少忘记关闭连接的问题。如果你不使用with也可以这样写connget_connection()try:create_table(conn)finally:conn.close()八、常见错误总结1. 忘记提交事务conn.execute(INSERT INTO students ...)只执行 SQL 还不够写操作后要加conn.commit()2. 单参数元组忘记逗号错误写法conn.execute(SELECT * FROM students WHERE id ?,(student_id))正确写法conn.execute(SELECT * FROM students WHERE id ?,(student_id,))3. 直接拼接 SQL错误写法sqlfSELECT * FROM students WHERE name {name}正确写法sqlSELECT * FROM students WHERE name ?conn.execute(sql,(name,))九、可以继续扩展的方向学会这个基础版本后可以继续尝试增加命令行菜单让用户输入选项操作数据库增加异常处理例如捕获数据库执行错误增加更多字段例如手机号、创建时间把数据库操作封装成一个StudentRepository类使用 Flask 或 FastAPI 做一个简单的 Web 接口十、总结Python 操作 SQLite 的核心流程可以总结为连接数据库 - 创建表 - 执行 SQL - 提交事务 - 查询结果 - 关闭连接最常用的几个方法是方法作用sqlite3.connect()连接数据库conn.execute()执行 SQLconn.commit()提交事务fetchone()查询一条记录fetchall()查询多条记录conn.close()关闭连接SQLite 轻量、免安装、上手快非常适合 Python 新手练习数据库的增删改查。掌握本文这个小项目后再去学习 MySQL、PostgreSQL 或 ORM 框架会更容易理解数据库操作的底层逻辑。