Python SQLite3 保姆级教程:从零开始学数据库操作
本文适合纯新手!无需任何数据库基础,跟着步骤操作即可掌握 SQLite3 的核心用法。
目标:让你像用记事本一样轻松操作数据库!
目录
1. 什么是 SQLite3?
SQLite3 是一个轻量级的 嵌入式数据库,无需安装独立服务,所有数据存储在一个文件中。
- ✅ 无需配置:像操作普通文件一样使用。
- ✅ 跨平台:数据库文件可在 Windows/macOS/Linux 共享。
- ✅ 适合小型项目:APP 配置、本地缓存、小型网站等。
2. 环境准备
2.1 确认 Python 环境
确保已安装 Python(建议 3.6+)。打开终端输入以下命令:
bash
python --version
若显示版本号(如 Python 3.8.5
)则正常。若报错,需先 安装 Python。
2.2 导入 SQLite3 模块
无需额外安装 !Python 自带 sqlite3
库,直接在代码中导入:
python
import sqlite3
3. 连接数据库
3.1 连接到磁盘数据库(持久化)
python
# 连接到当前目录下的 test.db 文件(不存在则自动创建)
conn = sqlite3.connect('test.db')
- ✅ 文件路径规则 :
'test.db'
:当前目录下的test.db
文件。'/home/user/data.db'
:绝对路径指定位置。
- ❗ 注意:关闭程序后文件依然存在,下次可重新连接。
3.2 连接到内存数据库(临时使用)
python
conn = sqlite3.connect(':memory:') # 程序关闭后数据消失
3.3 创建游标(操作数据库的"手")
python
cursor = conn.cursor() # 所有 SQL 操作通过游标执行
4. 创建表
4.1 基本语法
python
# 创建 users 表(如果不存在)
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT, # 自增主键
name TEXT NOT NULL, # 文本类型,不能为空
age INTEGER, # 整数类型
email TEXT UNIQUE # 唯一约束(邮箱不可重复)
)
''')
conn.commit() # 提交事务(创建表需要提交)
4.2 字段类型
类型 | 说明 |
---|---|
INTEGER |
整数(如 1, -5, 100) |
TEXT |
字符串(如 "Hello") |
REAL |
浮点数(如 3.14) |
BLOB |
二进制数据(如图片) |
4.3 验证表是否创建成功
python
# 查询数据库中所有表名
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
print(cursor.fetchall()) # 输出:[('users',)]
5. 增删改查(CRUD)
5.1 插入数据(Create)
插入单条数据
python
# 使用 ? 占位符避免 SQL 注入
cursor.execute('''
INSERT INTO users (name, age, email)
VALUES (?, ?, ?)
''', ('Alice', 30, 'alice@example.com'))
conn.commit() # 提交!
批量插入数据
python
users = [
('Bob', 25, 'bob@example.com'),
('Charlie', 35, 'charlie@example.com')
]
cursor.executemany('''
INSERT INTO users (name, age, email) VALUES (?, ?, ?)
''', users)
conn.commit()
5.2 查询数据(Read)
查询所有记录
python
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall() # 获取全部结果
for row in rows:
print(row) # 输出:(1, 'Alice', 30, 'alice@example.com')
条件查询
python
# 查找年龄大于 28 的用户
cursor.execute('SELECT * FROM users WHERE age > ?', (28,))
results = cursor.fetchall()
for row in results:
print(f"ID: {row[0]}, 姓名: {row[1]}, 年龄: {row[2]}")
查询单条记录
python
cursor.execute('SELECT * FROM users WHERE id = ?', (1,))
user = cursor.fetchone() # 只获取第一条
print(user) # 输出:(1, 'Alice', 30, 'alice@example.com')
5.3 更新数据(Update)
python
# 将 Alice 的邮箱更新为 new_email@example.com
cursor.execute('''
UPDATE users
SET email = ?
WHERE name = ?
''', ('new_email@example.com', 'Alice'))
conn.commit()
5.4 删除数据(Delete)
python
# 删除 ID 为 2 的用户
cursor.execute('DELETE FROM users WHERE id = ?', (2,))
conn.commit()
6. 事务与错误处理
6.1 什么是事务?
- 事务:一组原子性的操作,要么全部成功,要么全部失败。
- 示例:转账操作(A 扣款,B 加款必须同时成功)。
6.2 手动提交与回滚
python
try:
cursor.execute("INSERT INTO users (name) VALUES ('David')")
cursor.execute("INSERT INTO users (name) VALUES ('Eve')")
conn.commit() # 成功则提交
except sqlite3.Error as e:
print("出错啦:", e)
conn.rollback() # 失败则回滚(撤销所有操作)
6.3 自动提交(推荐)
使用 with
上下文管理器:
python
with sqlite3.connect('test.db') as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name) VALUES ('Frank')")
# 无需 commit,退出 with 块时自动提交
7. 高级技巧
7.1 以字典形式返回结果
默认返回元组,可通过 row_factory
改为字典:
python
def dict_factory(cursor, row):
return {col[0]: row[idx] for idx, col in enumerate(cursor.description)}
conn.row_factory = dict_factory
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE id = 1')
print(cursor.fetchone()) # 输出:{'id': 1, 'name': 'Alice', ...}
7.2 使用 SQLite 浏览器查看数据
- 可视化查看表结构、数据。
- 直接执行 SQL 语句。
8. 常见问题
Q1:代码运行后找不到数据库文件?
-
检查当前目录 :在代码中添加:
pythonimport os print(os.getcwd()) # 查看文件实际保存路径
-
使用绝对路径 :如
sqlite3.connect('/User/name/data.db')
Q2:插入数据后查询不到?
- 忘记提交事务 :确保执行
conn.commit()
。 - 查询条件错误:检查 WHERE 子句是否拼写正确。
Q3:如何备份数据库?
直接复制 .db
文件即可!SQLite 数据库是单一文件。
9. 总结
通过本教程,你已经学会了:
- 连接数据库(文件 vs 内存)
- 创建表(字段类型与约束)
- 增删改查(参数化查询防注入)
- 事务管理(提交与回滚)
- 高级技巧(字典结果、可视化工具)
下一步建议:
- 尝试为本地的通讯录、笔记应用添加数据库支持。
- 学习更复杂的 SQL 语法(如 JOIN 查询)。
遇到问题? 随时查阅本文代码示例,或使用 SQLite 浏览器调试!