大家好,我是木木。
今天给大家分享一个利落的 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 的业务系统也不一定需要再引入它。
上线检查
总结
sqlite-utils 的气质很利落:少写样板代码,快速把数据放进 SQLite,再查询、改表、搜索。做工具和数据脚本时非常顺手。