SQLite 入门实战:从安装到常用 SQL 与 Python 集成

举报
yd_293554343 发表于 2026/11/10 10:17:36 2026/11/10
【摘要】 SQLite 是一款轻量、零配置的嵌入式关系型数据库,它把整个数据库存放在一个普通文件里,不需要单独的服务器进程,也不需要复杂的安装配置。正因为足够简单,它被广泛用在移动应用、桌面软件、物联网设备和本地开发测试中。本文用一个待办清单的例子,带你从安装开始,走完常用 SQL,再用 Python 把它真正用起来。 一、什么是 SQLiteSQLite 的核心特点可以概括为四点。第一,零配置:数据...

SQLite 是一款轻量、零配置的嵌入式关系型数据库,它把整个数据库存放在一个普通文件里,不需要单独的服务器进程,也不需要复杂的安装配置。正因为足够简单,它被广泛用在移动应用、桌面软件、物联网设备和本地开发测试中。本文用一个待办清单的例子,带你从安装开始,走完常用 SQL,再用 Python 把它真正用起来。

一、什么是 SQLite

SQLite 的核心特点可以概括为四点。第一,零配置:数据库就是一个文件,复制、备份、迁移都只需要操作这一个文件。第二,体积小、速度快:查询和写入都在进程内完成,没有网络开销,适合本地场景。第三,功能完整:支持事务、索引、视图、触发器和外键,SQL 语法与主流关系型数据库高度兼容。第四,跨平台:同一份数据库文件可以在 Windows、macOS、Linux 和移动端之间直接使用。

需要注意的是,SQLite 不是 MySQL 或 PostgreSQL 的替代品。它更适合单机、低并发、读写量适中的场景;如果是多人同时写入的高并发服务端,仍然应该选择服务器型数据库。

二、安装与验证

多数系统已经自带 SQLite。在终端输入以下命令查看版本:

sqlite3 --version

如果显示版本号,说明已经可用。如果提示命令不存在,可以到 SQLite 官网下载预编译的命令行工具,解压后把 sqlite3 加入系统路径即可。Python 标准库内置了 sqlite3 模块,不需要额外安装数据库软件就能直接写代码。

三、创建第一个数据库

进入 sqlite3 命令行,创建一个名为 todo.db 的数据库,并建一张任务表:

CREATE TABLE tasks (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  title TEXT NOT NULL,
  done INTEGER NOT NULL DEFAULT 0,
  created_at TEXT NOT NULL DEFAULT (datetime('now'))
);

INSERT INTO tasks (title) VALUES ('阅读 SQLite 文档');
INSERT INTO tasks (title) VALUES ('写一个待办清单小工具');
SELECT * FROM tasks;

上面的表定义里,id 是自增主键,title 不能为空,done 用 0 和 1 表示未完成和已完成,created_at 用默认表达式记录创建时间。建表时把字段类型和约束一次想清楚,后面会少很多麻烦。

四、常用 SQL 一览

查询是最常用的操作,掌握下面几类就够日常使用。条件查询用 WHERE,排序用 ORDER BY,分页用 LIMIT 和 OFFSET:

SELECT id, title FROM tasks WHERE done = 0 ORDER BY id DESC LIMIT 10;
UPDATE tasks SET done = 1 WHERE id = 1;
DELETE FROM tasks WHERE id = 2;

统计类需求可以用聚合函数,例如统计未完成任务数:SELECT COUNT(*) FROM tasks WHERE done = 0。需要按状态分组时用 GROUP BY。多表关联时用 JOIN,例如把任务表和分类表按分类编号关联,再按分类统计数量。写 SQL 时先想清楚要什么结果,再决定用哪些子句,避免把所有逻辑都堆到一条语句里。

五、用 Python 集成 SQLite

Python 的 sqlite3 模块让数据库操作变得很直观。下面这段代码创建连接、插入数据并查询:

import sqlite3

conn = sqlite3.connect('todo.db')
conn.execute('INSERT INTO tasks (title) VALUES (?)', ('学习索引的用法',))
conn.commit()
rows = conn.execute('SELECT id, title FROM tasks WHERE done = 0').fetchall()
for task_id, title in rows:
    print(task_id, title)
conn.close()

这里有三个要点。第一,参数用问号占位符传入,既能避免 SQL 注入,也能正确处理引号和特殊字符。第二,写入后要调用 commit 提交,否则数据不会落盘。第三,使用完毕后关闭连接,避免文件被长期占用。需要返回字典而不是元组时,可以设置 conn.row_factory = sqlite3.Row。

六、事务、索引与性能

SQLite 默认每条写入都是一个事务,批量写入时把多条语句放在同一个事务里,速度会快很多。做法很简单:在循环外开启事务,循环结束后再统一提交。经常按某一列查询时,可以给它建索引:CREATE INDEX idx_tasks_done ON tasks(done)。索引能显著加快查询,但也会让写入稍慢,建索引前先确认查询模式。

另外要记住:SQLite 在同一时刻只允许一个写入者,多个进程同时写会互相等待。设计程序时尽量缩短事务时间,读操作和写操作不要互相阻塞。

七、常见问题

初学者常遇到三个问题。一是数据库文件找不到:相对路径取决于程序当前工作目录,建议用绝对路径或在程序启动时打印出来确认。二是忘记提交:执行 INSERT 后没有 commit,关闭连接后数据就丢了。三是表被锁住:上一个连接没有关闭就反复打开新连接,先检查并关闭闲置连接。遇到报错时,先读报错信息里的表名和字段名,多数问题都能快速定位。

八、小结

SQLite 的学习路径很清晰:先理解一个文件就是一个数据库,再练习建表、增删改查,然后用 Python 的 sqlite3 模块把数据库接到自己的程序里,最后根据实际查询加上事务和索引。建议你亲手把本文的例子跑一遍,再给待办清单加一个分类表,练习一次 JOIN 查询。做完这个小项目,日常开发中遇到本地存储需求时,SQLite 往往就是最合适的第一选择。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。