1. SQLite 数据库入门:Python 开发者的轻量级数据存储方案
作为一名 Python 开发者,我经常需要处理各种数据存储需求。从简单的脚本到中型项目,SQLite 一直是我的首选解决方案。它就像数据库界的瑞士军刀——小巧但功能齐全,无需额外配置就能直接使用。
SQLite 的最大优势在于它的"零配置"特性。与 MySQL 或 PostgreSQL 这些需要单独安装和配置的数据库系统不同,SQLite 直接以单个文件形式存储数据,Python 标准库中内置了 sqlite3 模块,这意味着你可以立即开始使用,无需任何额外安装。
在实际项目中,我发现 SQLite 特别适合以下场景:
- 本地应用程序的数据存储
- 移动应用(iOS/Android 都原生支持 SQLite)
- 中小型网站的数据库后端
- 数据分析的中间结果存储
- 原型开发和测试环境
提示:虽然 SQLite 功能强大,但它并不适合高并发的写入场景。如果你的应用需要处理大量并发写入(比如每秒超过 100 次写入),可能需要考虑客户端-服务器架构的数据库系统。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SQLite 基础操作详解
2.1 数据库连接与游标管理
在 Python 中使用 SQLite 的第一步是建立连接。连接对象不仅负责与数据库文件的通信,还管理事务等重要功能。
python复制import sqlite3
# 建立数据库连接
# 如果文件不存在会自动创建
conn = sqlite3.connect('my_database.db')
# 创建游标对象
cursor = conn.cursor()
# 检查 SQLite 版本
cursor.execute('SELECT sqlite_version()')
version = cursor.fetchone()[0]
print(f"当前 SQLite 版本: {version}")
# 关闭连接
conn.close()
在实际开发中,我强烈建议使用上下文管理器(with 语句)来管理数据库连接,这样可以确保连接总是被正确关闭,即使在发生异常的情况下:
python复制with sqlite3.connect('my_database.db') as conn:
cursor = conn.cursor()
# 执行各种数据库操作
# 不需要显式调用 conn.close()
2.2 表设计与创建
良好的表设计是数据库应用的基础。在 SQLite 中创建表时,需要考虑字段类型、约束和索引。
SQLite 支持以下几种主要数据类型:
- NULL: 空值
- INTEGER: 整数
- REAL: 浮点数
- TEXT: 文本字符串
- BLOB: 二进制数据
下面是一个更完整的用户表示例,包含了各种约束和索引:
python复制create_users_table = """
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
email TEXT UNIQUE CHECK(email LIKE '%@%.%'),
age INTEGER CHECK(age >= 0),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT 1
);
"""
# 添加索引
create_index = "CREATE INDEX IF NOT EXISTS idx_users_username ON users (username);"
with sqlite3.connect('app.db') as conn:
conn.execute(create_users_table)
conn.execute(create_index)
conn.commit()
注意事项:SQLite 的 ALTER TABLE 功能有限,一旦表创建后,修改表结构会比较麻烦。因此,在设计阶段就要仔细考虑表结构,特别是主键和约束。
3. CRUD 操作实战技巧
3.1 高效数据插入
在实际项目中,我们经常需要插入大量数据。以下是几种不同的插入方法及其性能比较:
- 单条插入(最慢):
python复制cursor.execute("INSERT INTO products (name, price) VALUES (?, ?)", ('Product A', 19.99))
- 多条插入(使用 executemany):
python复制products = [('Product B', 29.99), ('Product C', 39.99)]
cursor.executemany("INSERT INTO products (name, price) VALUES (?, ?)", products)
- 批量事务插入(最快):
python复制def batch_insert(conn, data, batch_size=1000):
cursor = conn.cursor()
try:
for i in range(0, len(data), batch_size):
batch = data[i:i+batch_size]
cursor.executemany("INSERT INTO products (name, price) VALUES (?, ?)", batch)
conn.commit() # 每批提交一次
except Exception as e:
conn.rollback()
raise e
在我的性能测试中,对于 10,000 条记录:
- 单条插入耗时约 12 秒
- executemany 耗时约 1.5 秒
- 批量事务插入(每 1000 条提交一次)耗时约 0.8 秒
3.2 高级查询技巧
SQLite 支持大多数标准 SQL 查询功能。以下是一些实用技巧:
- 分页查询:
python复制# 获取第2页,每页10条
page = 2
per_page = 10
cursor.execute("SELECT * FROM products ORDER BY id LIMIT ? OFFSET ?",
(per_page, (page-1)*per_page))
- 模糊查询:
python复制search_term = '%apple%'
cursor.execute("SELECT * FROM products WHERE name LIKE ?", (search_term,))
- 聚合查询:
python复制cursor.ex
