一、什么是 SQLite?
SQLite 是一个 C 语言库,实现了自给自足、无服务器、零配置、事务性的 SQL 数据库引擎。它的主要特点包括:
Python sqlite3 模块是内置的轻量级数据库接口,无需安装即可使用。文章介绍了 SQLite 的特点(轻量、无服务器、ACID),详细说明了连接数据库、创建游标、执行 SQL 语句的基本流程。通过代码示例展示了创建表、插入数据、查询更新删除操作,并强调了参数化查询防止 SQL 注入的重要性。此外还讲解了上下文管理器、自定义函数、行工厂等高级功能及 WAL 模式优化,适用于小型应用、桌面程序及原型开发场景。

SQLite 是一个 C 语言库,实现了自给自足、无服务器、零配置、事务性的 SQL 数据库引擎。它的主要特点包括:
Python 从 2.5 版本开始内置了 sqlite3 模块(也称为 pysqlite),它为 SQLite 提供了 Python 接口。你可以直接通过 import sqlite3 来使用它,无需额外安装第三方包。
import sqlite3
使用 sqlite3 的典型流程如下:
import sqlite3
# 1. 连接到数据库(如果文件不存在会自动创建)
conn = sqlite3.connect('example.db')
# 2. 创建游标对象
cursor = conn.cursor()
# 3. 创建一张用户表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
email TEXT UNIQUE
)
''')
# 4. 插入数据
cursor.execute('''
INSERT INTO users (name, age, email) VALUES (?, ?, ?)
''', ('Alice', 25, '[email protected]'))
# 5. 提交事务
conn.commit()
# 6. 查询数据
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
print(row)
# 7. 关闭连接
conn.close()
sqlite3.connect(database) 用于连接数据库。参数说明:
database:数据库文件路径。传入 ':memory:' 可创建内存数据库(程序结束即消失)。timeout, check_same_thread 等。# 使用内存数据库
conn = sqlite3.connect(':memory:')
游标是执行 SQL 命令的对象。通过 conn.cursor() 创建。常用方法:
execute(sql, parameters):执行一条 SQL 语句。executemany(sql, seq_of_parameters):批量执行。fetchone():获取下一行结果。fetchall():获取所有结果。fetchmany(n):获取最多 n 行。强烈建议使用参数化查询,而不是字符串拼接。例如:
✅ 正确做法(推荐):
cursor.execute("SELECT * FROM users WHERE age > ?", (18,))
❌ 危险做法(避免):
age = 18
cursor.execute(f"SELECT * FROM users WHERE age > {age}") # 可能导致 SQL 注入
users = [
('Bob', 30, '[email protected]'),
('Charlie', 35, '[email protected]'),
('Diana', 28, '[email protected]')
]
cursor.executemany('INSERT INTO users (name, age, email) VALUES (?, ?, ?)', users)
conn.commit()
cursor.execute('UPDATE users SET age = ? WHERE name = ?', (26, 'Alice'))
conn.commit()
cursor.execute('DELETE FROM users WHERE name = ?', ('Bob',))
conn.commit()
cursor.execute('SELECT name, email FROM users WHERE age > ?', (30,))
results = cursor.fetchall()
for name, email in results:
print(f'{name}: {email}')
为了确保连接和游标正确关闭,推荐使用 with 语句:
import sqlite3
try:
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
cursor.execute('INSERT INTO users (name, age, email) VALUES (?, ?, ?)', ('Eve', 22, '[email protected]'))
# 自动提交(成功时),出错则回滚
except sqlite3.DatabaseError as e:
print(f"数据库错误:{e}")
注意:使用
with时,只有在没有异常的情况下才会自动提交。如果有异常,会自动回滚。
你可以在 SQLite 中注册 Python 函数:
def uppercase(text):
return text.upper()
conn.create_function('UPPERCASE', 1, uppercase)
cursor.execute("SELECT UPPERCASE(name) FROM users")
print(cursor.fetchall()) # [('ALICE',), ...]
默认返回元组,但可以通过 row_factory 返回字典风格的结果:
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute('SELECT * FROM users LIMIT 1')
row = cursor.fetchone()
print(row['name'], row['email']) # 支持按列名访问
with 语句管理连接,确保资源释放。check_same_thread=False 并自行管理同步。commit()。对于频繁操作,考虑开启 WAL 模式提升并发性能:
cursor.execute('PRAGMA journal_mode=WAL')
sqlite3 非常适合以下场景:
不适合高并发、多写入的大型系统。
Python 的 sqlite3 模块是一个强大而简洁的工具,让你无需复杂的数据库配置即可实现数据持久化。它结合了 SQL 的灵活性和 Python 的易用性,是学习数据库操作和快速开发的理想选择。
参考资料:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online