用 SQLite 做轻量数据存储:零部署的本地数据库入门

举报
yd_292915714 发表于 2026/11/03 07:19:13 2026/11/03
【摘要】 很多刚上手后端或数据分析的朋友,一提到「数据库」就想到装 MySQL、配账号、建连接池,其实如果数据量不大、只有单机访问,SQLite 往往是更合适的选择:它不是「简化版数据库」,而是一个嵌入式的完整关系数据库,整个库就是磁盘上的一个文件,

很多刚上手后端或数据分析的朋友,一提到「数据库」就想到装 MySQL、配账号、建连接池,其实如果数据量不大、只有单机访问,SQLite 往往是更合适的选择:它不是「简化版数据库」,而是一个嵌入式的完整关系数据库,整个库就是磁盘上的一个文件,不需要独立服务进程,Python 内置 sqlite3 模块就能直接用。

## 为什么选 SQLite

第一,零部署。拷贝文件就是备份,换机器就是迁移,没有端口、没有服务、没有配置文件。第二,标准库支持。Python 自带 sqlite3,不需要 pip 安装任何东西。第三,事务完整。SQLite 支持 ACID 事务,比手写 JSON 文件读写可靠得多——程序中途崩溃也不会出现半截数据。第四,规模够用。单文件几个 GB、百万行级别的表,日常查询性能完全够用。

## 十分钟上手

建库建表只需要三行代码:

```python
import sqlite3
conn = sqlite3.connect("app.db")
conn.execute("CREATE TABLE IF NOT EXISTS visits (id INTEGER PRIMARY KEY, url TEXT, ts TEXT)")
```

插入数据建议始终用参数化查询,既防 SQL 注入,也省去转义烦恼:

```python
conn.execute("INSERT INTO visits (url, ts) VALUES (?, ?)", ("/index", "2026-11-03 06:00:00"))
conn.commit()
```

查询同样直观:

```python
rows = conn.execute("SELECT url, COUNT(*) AS n FROM visits GROUP BY url ORDER BY n DESC LIMIT 10").fetchall()
```

如果写的是 Web 服务,记得在并发上做一个选择:SQLite 的写操作是整库加锁,多线程写入时给每个请求单独建连接(或用 `check_same_thread=False` 配合锁),读多写少的场景则几乎不用操心。

## 什么时候不该用 SQLite

边界也很清晰:需要多台机器同时写、数据量到了几十 GB、或者有大量高并发写入时,就该换 MySQL/PostgreSQL 这类客户端-服务端数据库了。另外 SQLite 的用户权限体系很弱,它假设文件本身是受保护的,不适合把库文件直接暴露给不可信环境。

## 小结

工具选型的原则是「够用且最简单」:本地工具的数据落盘、小型网站的缓存与统计、脚本任务的中间结果,SQLite 都是省心之选。先用 `sqlite3` 把数据管起来,等规模真的长大了再迁移,迁移成本也远比一开始就背上整套数据库运维要低。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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