Python SQLite3 使用教程
本教程将带你从零掌握 Python 内置 sqlite3 模块的核心用法——从无配置的快速上手,到事务、行工厂这类高级特性的灵活应用,最后还有完整可运行的示例和练习题巩固。
1. SQLite 简介
SQLite 是目前全球部署最广泛的嵌入式数据库引擎,它没有传统数据库的“服务端-客户端”架构,直接把整个数据库系统(包括定义、数据、索引)压缩进单一跨平台文件,是轻量级项目的首选存储方案。
它的核心优势:
- 🚫 零服务器/零配置:无需安装额外软件,创建文件即可用
- 🌐 跨全平台:支持从手机端到服务器的所有主流系统
- 📝 兼容标准 SQL:学习成本极低,语法可复用
- 🐍 Python 原生内置:Python 2.5+ 直接引入
sqlite3模块
2. 前置核心概念
正式动手前,先理清两个必用的核心对象和通用操作流程:
2.1 核心对象
2.2 通用操作流程
所有 SQLite 操作都遵循这 6 步(但可以用上下文管理器简化):
- 建立数据库文件连接
- 从连接获取游标对象
- 通过游标执行 SQL
- 如果是写操作(增删改),提交事务
- 关闭游标(可选但推荐)
- 关闭连接(必须,防止资源泄漏)
3. 基础 CRUD 操作
我们以「用户管理」为例,一步步演示核心功能。
3.1 连接数据库
如果只是临时测试,不想生成持久化文件,可以用 :memory: 参数创建内存数据库:
3.2 创建表
3.3 插入数据
⚠️ 敲黑板!绝对不要用字符串拼接参数! 用 ? 占位符+元组的参数化查询,防止 SQL 注入。
单条插入
批量插入
用 executemany() 方法,比循环调用 execute() 快几十倍:
3.4 查询数据
查询有 3 种获取结果的方式,按需选择:
全量获取:fetchall()
单条获取:fetchone()
适合查询唯一结果的场景(比如按 ID/唯一键查):
分批获取:fetchmany(n)
适合大数据量查询,避免一次性加载内存溢出:
3.5 更新数据
3.6 删除数据
4. 提升开发效率的高级特性
4.1 用上下文管理器自动管理连接/事务
Python 3.10+ 开始,Connection 本身支持 with 语句:
- 成功退出
with块时自动提交事务 - 抛出异常时自动回滚事务
- 块结束后自动关闭连接
4.2 用行工厂返回字典(而非默认元组)
默认 fetchall()/fetchone() 返回的是不带字段名的元组,用 row_factory 可以改成更易读的字典:
自定义字典工厂
用内置的 sqlite3.Row
如果不想自己写工厂,Python 内置了更轻量的 sqlite3.Row:
4.3 显式控制事务
虽然 with 语句已经自动处理了,但复杂场景下显式控制更灵活:
5. 最佳实践清单
- ✅ 永远用参数化查询:不要碰字符串拼接 SQL
- ✅ 用
with语句:简化连接/事务管理,避免资源泄漏 - ✅ 批量操作优先
executemany():性能提升显著 - ✅ 合理使用内存数据库:临时测试/缓存用
:memory: - ✅ 捕获
sqlite3.Error:处理可能的 SQL 语法/约束错误 - ✅ 复杂应用考虑 ORM:比如 SQLAlchemy,把表映射成 Python 类
6. 完整可运行示例:简易商品库存系统
7. 配套练习与解决方案
练习:查询指定分数区间的学生
要求:实现 get_score_in(low, high) 函数,返回分数在 [low, high] 之间的学生姓名,按分数从低到高排序。

