当前位置:首页>python>sqlite-utils,一个利落的 Python 库

sqlite-utils,一个利落的 Python 库

  • 2026-10-11 09:49:55
sqlite-utils,一个利落的 Python 库

大家好,我是木木。

今天给大家分享一个利落的 Python 库,sqlite-utils。

sqlite-utils

SQLite 很轻,但直接写脚本管理表结构、导入 JSON/CSV、做全文搜索时,还是会有不少重复代码。sqlite-utils 把这些日常操作封装成 CLI 和 Python API:插入字典、自动建表、改 schema、启用 FTS 都很顺手。它特别适合数据清洗、小型工具、爬虫落库、原型验证和需要快速查看 SQLite 数据的场景。

项目地址:https://github.com/simonw/sqlite-utils

官方文档:https://sqlite-utils.datasette.io/

三大特点

建表省心

可以直接插入字典列表并自动创建字段,适合把 JSON、CSV 或爬虫结果快速落进 SQLite。

改表方便

常见 schema 调整有高层 API,减少手写 ALTER TABLE 和复制临时表的麻烦。

搜索实用

内置 FTS 支持,做小型检索、数据浏览和 Datasette 展示时很合拍。

最佳实践

安装方式:pip install sqlite-utils。

第一段代码解决的问题是:从 Python 字典直接创建表、插入数据并查询。标签列表会被序列化进 SQLite,适合轻量数据脚本。

fromsqlite_utilsimportDatabasedb=Database(memory=True)db["books"].insert_all([{"id":1,"title":"Python Notes","tags":["python","sqlite"],"pages":120},{"id":2,"title":"Data Tools","tags":["data"],"pages":90},],pk="id")print("tables:",db.table_names())print("count:",db["books"].count)forrowindb["books"].rows_where("pages > ?",[100]):print(row["id"],row["title"],row["tags"])

第二段看 schema 调整。临时加字段、补充计算结果、修正数据形态,是数据处理脚本里很常见的操作。

fromsqlite_utilsimportDatabasedb=Database(memory=True)db["books"].insert_all([{"id":1,"title":"Python Notes","pages":120},{"id":2,"title":"Data Tools","pages":90},],pk="id")print("columns before:",[c.nameforcindb["books"].columns])db["books"].add_column("rating",int)db["books"].update(1,{"rating":5})print("columns after:",[c.nameforcindb["books"].columns])print("rating:",db["books"].get(1)["rating"])

进阶一点看全文搜索。很多小项目不需要上 Elasticsearch,用 SQLite FTS 就能完成不错的本地检索体验。

fromsqlite_utilsimportDatabasedb=Database(memory=True)articles=db["articles"]articles.insert_all([{"id":1,"title":"SQLite search","body":"full text search with sqlite"},{"id":2,"title":"Python data","body":"small tools for data work"},],pk="id")articles.enable_fts(["title","body"],create_triggers=True)forrowinarticles.search("sqlite"):print("hit:",row["id"],row["title"])

环境与版本信息

本文示例使用 Python 3.11,sqlite-utils 版本为 3.39,关键依赖包括 click 8.3.1、sqlite-fts4 1.0.3 和 tabulate 0.10.0。当前包声明 Python 版本要求为 3.10 及以上。

适用场景

适合数据清洗、轻量 ETL、爬虫结果落库、命令行数据工具、原型验证,以及和 Datasette 搭配做小型数据浏览。

不适用场景

如果是高并发写入、复杂权限、多租户大系统,SQLite 本身不是最合适的数据库。已经有成熟 ORM 的业务系统也不一定需要再引入它。

上线检查

  1. 文件型 SQLite 要注意备份、锁和并发写入。
  2. 导入外部数据前先做字段类型和主键策略确认。
  3. FTS 表要明确触发器和重建索引流程。

总结

sqlite-utils 的气质很利落:少写样板代码,快速把数据放进 SQLite,再查询、改表、搜索。做工具和数据脚本时非常顺手。

最新文章

随机文章