Python 中如何使用 sqlite3 操作 SQLite 数据库?
在 Python 开发中,SQLite 是一种轻量级的关系型数据库,它无需单独安装数据库服务器,所有数据存储在一个单独的文件中,适用于小型应用、移动开发、数据分析等场景。Python 提供了内置的 sqlite3 模块,方便我们操作 SQLite 数据库。本文将详细介绍 sqlite3 模块的使用,包括数据库连接、表操作、数据增删改查(CRUD),以及常见的事务管理和参数化查询,帮助你快速掌握 Python 操作 SQLite 数据库的方法。
1. 为什么选择 SQLite?
✅ 零配置:Python 内置支持,无需安装额外数据库服务。
✅ 文件存储:数据库仅是一个 .db 文件,便于管理。
✅ 轻量高效:适用于小型应用、测试环境、移动端存储。
✅ SQL 支持:支持 SQL 语法,易于与其他数据库迁移。
📌 SQLite 适用场景:
2. 连接 SQLite 数据库
2.1 连接或创建数据库
使用 sqlite3.connect() 连接数据库:
import sqlite3
# 连接数据库(如果不存在则创建)
conn = sqlite3.connect("example.db")
print("数据库连接成功")
📌 特点:
example.db 存在,则连接它,否则自动创建该文件。2.2 获取游标(Cursor)
数据库操作需要使用 游标对象(cursor):
cursor = conn.cursor()
📌 作用:
cursor.execute(sql) 用于执行 SQL 语句。cursor.fetchall() 获取查询结果。3. 创建表(CREATE TABLE)
使用 CREATE TABLE 语句创建数据库表:
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
city TEXT
)
''')
conn.commit() # 提交更改
print("表创建成功")
📌 解析:
id INTEGER PRIMARY KEY AUTOINCREMENT:主键自增。TEXT NOT NULL:name 必须有值。IF NOT EXISTS:避免重复创建表。4. 插入数据(INSERT INTO)
4.1 插入单条数据
cursor.execute("INSERT INTO users (name, age, city) VALUES (?, ?, ?)",
("Alice", 25, "New York"))
conn.commit()
print("插入数据成功")
📌 注意:
? 占位符 避免 SQL 注入。conn.commit() 提交事务,否则数据不会保存。4.2 插入多条数据(executemany())
users = [
("Bob", 30, "San Francisco"),
("Charlie", 28, "Los Angeles"),
("David", 35, "Seattle")
]
cursor.executemany("INSERT INTO users (name, age, city) VALUES (?, ?, ?)", users)
conn.commit()
print("批量插入成功")
📌 适用于:
execute() 提高效率。5. 查询数据(SELECT)
5.1 查询所有数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
📌 fetchall() 获取所有数据,返回列表:
(1, 'Alice', 25, 'New York')
(2, 'Bob', 30, 'San Francisco')
(3, 'Charlie', 28, 'Los Angeles')
5.2 查询单条数据(fetchone())
cursor.execute("SELECT * FROM users WHERE name = ?", ("Alice",))
user = cursor.fetchone()
print(user)
📌 fetchone() 获取单条数据,适用于查询唯一记录。
6. 更新数据(UPDATE)
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, "Alice"))
conn.commit()
print("数据更新成功")
📌 确保:
SET age = ? 只更新 age 列,避免误修改其他数据。7. 删除数据(DELETE)
cursor.execute("DELETE FROM users WHERE name = ?", ("David",))
conn.commit()
print("数据删除成功")
📌 务必小心:
WHERE 条件会删除所有数据!SELECT 确认数据是否存在。8. 事务管理(commit() 和 rollback())
8.1 commit() 提交事务
conn.commit() # 确保数据写入数据库
📌 每次 INSERT、UPDATE、DELETE 后,都要 commit() 确保数据持久化。
8.2 rollback() 回滚事务
try:
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (100, "Charlie"))
raise Exception("模拟异常") # 模拟错误
conn.commit()
except Exception as e:
conn.rollback() # 发生错误时回滚
print("事务回滚:", e)
📌 作用:
commit(),防止错误影响数据库。9. 关闭数据库连接
cursor.close()
conn.close()
print("数据库连接已关闭")
📌 最佳实践:
10. 结合 with 语句自动管理连接
Python 提供 with 语法,自动关闭数据库连接:
with sqlite3.connect("example.db") as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())
📌 优势:
commit()rollback()conn11. 使用 Row 以字典方式访问数据
默认 fetchall() 返回元组:
cursor.execute("SELECT * FROM users")
print(cursor.fetchone()) # (1, 'Alice', 25, 'New York')
可以改用 sqlite3.Row 使数据可用字典访问:
conn.row_factory = sqlite3.Row # 设置行工厂
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
row = cursor.fetchone()
print(row["name"], row["age"]) # Alice 25
📌 适用于:
row[0] 这样的索引访问方式。12. 结论
| 操作 | 代码示例 |
|---|---|
| 连接数据库 | conn = sqlite3.connect("example.db") |
| 创建表 | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER) |
| 插入数据 | INSERT INTO users (name, age) VALUES (?, ?) |
| 查询数据 | SELECT * FROM users |
| 更新数据 | UPDATE users SET age = ? WHERE name = ? |
| 删除数据 | DELETE FROM users WHERE name = ? |
| 事务管理 | commit() / rollback() |
| 关闭连接 | conn.close() |
sqlite3 是 Python 内置的数据库模块,适用于小型应用、测试、数据存储等场景。掌握这些操作,你就可以轻松管理 SQLite 数据库,提升开发效率!🚀
📌 有什么问题和经验想分享?欢迎在评论区交流、点赞、收藏、关注! 🎯
作者:莫比乌斯之梦