Python中sqlite3库的全面详解
以下是关于 Python 中 sqlite3 库的详细介绍及其核心功能与常用函数解析,结合嵌入式数据库开发场景与最佳实践:
一、sqlite3 库核心特性
sqlite3 是 Python 标准库中用于操作 SQLite 数据库的模块,其核心优势包括:
- 零配置嵌入:无需独立数据库服务,数据存储于单一
.db
文件。 - 轻量高效:适用于嵌入式设备、移动端及小型项目,文件体积仅几十 KB。
- 全功能 SQL 支持:支持事务、索引、触发器,兼容标准 SQL 语法。
- 跨平台兼容:支持 Windows、Linux、macOS 及移动操作系统。
二、常用函数与操作
1. 数据库连接与游标
函数/方法 | 功能描述 | 代码示例 |
---|---|---|
**sqlite3.connect() ** |
连接或创建数据库文件(若文件不存在则自动创建) | python<br>conn = sqlite3.connect('example.db') # 内存数据库用 ':memory:'[1,3](@ref) |
**conn.cursor() ** |
创建游标对象,用于执行 SQL 语句 | python<br>cursor = conn.cursor() |
**conn.close() ** |
关闭数据库连接,释放资源 | python<br>conn.close() |
2. 表操作与数据读写
CREATE TABLE
定义数据结构
python
cursor.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')[1,6](@ref)
python
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 30))[1,6](@ref)
conn.commit() # 提交事务确保数据持久化[6](@ref)
SELECT
语句及结果集处理
python
cursor.execute("SELECT * FROM users WHERE age > ?", (25,))
rows = cursor.fetchall() # 或 fetchone()/fetchmany()[2,6](@ref)
python
cursor.execute("UPDATE users SET age = 31 WHERE name = 'Alice'")[1](@ref)
cursor.execute("DELETE FROM users WHERE id = 1")[2](@ref)
3. 高级功能函数
方法/属性 | 功能描述 |
---|---|
**conn.commit() ** |
提交未完成的事务,确保数据更改生效 |
**conn.rollback() ** |
回滚事务,撤销未提交的操作 |
**cursor.description ** |
获取查询结果的字段元数据(如列名、类型) |
**sqlite3.Row ** |
将查询结果映射为字典形式(可通过 conn.row_factory = sqlite3.Row 启用) |
三、高级特性与优化
1. 事务管理
BEGIN TRANSACTION
和 COMMIT/ROLLBACK
实现原子操作
python
try:
cursor.execute("BEGIN TRANSACTION")
# 执行多个操作
conn.commit()
except sqlite3.Error:
conn.rollback()
isolation_level=None
关闭)2. 数据类型扩展
python
cursor.execute("CREATE TABLE docs (id INTEGER, content BLOB)")
cursor.execute("INSERT INTO docs VALUES (?, ?)", (1, json.dumps(data).encode()))
3. 数据库备份与恢复
python
conn = sqlite3.connect(':memory:')
# ...操作内存数据库...
conn.backup(sqlite3.connect('backup.db')) # 使用 backup() 方法[3](@ref)
四、应用场景与最佳实践
1. 典型应用场景
2. 性能优化建议
executemany()
提升写入效率
python
data = [('Bob', 28), ('Charlie', 35)]
cursor.executemany("INSERT INTO users VALUES (?, ?)", data)[6](@ref)
python
cursor.execute("CREATE INDEX idx_age ON users(age)")[3](@ref)
python
conn.execute("PRAGMA journal_mode=WAL")[3](@ref)
五、注意事项
- 并发写入限制:SQLite 仅支持单写多读,高并发场景需考虑锁机制
- 输入验证防注入:强制使用参数化查询(
?
占位符)而非字符串拼接 - 资源及时释放:通过上下文管理器自动关闭连接
python
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
# 操作数据库[6](@ref)
- 版本兼容性:确保不同环境中的 SQLite 版本一致,避免语法差异
作者:wanglaqqqq