ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Python生态数据库:TinyDB、PickleDB、MenteeDB

Python生态数据库:TinyDB、PickleDB、MenteeDB 在很多开发者意识里Python适合写写脚本文件、做做数据清理但事实证明Python已成为AI/LLM时代首选语言本文汇总几款纯几乎Python实现的数据库。TinyDB零依赖、基于JSON文件、纯Python实现、本地轻量级、开源GitHub7.6K Star625 Fork文档数据库支持索引查询、嵌套查询、多条件查询功能还挺全。1000条数据以内性能完全够用官方文档。适用场景变量或配置db.insert({last_run: 2024-03-27, status: success})不用环境变量或配置文件本地数据小工具如记账脚本每次花钱db.insert({amount: 50, category: 吃饭})聚合统计原型开发和测试用TinyDB快速验证跑通再换数据库。单元测试里用TinyDB跑完删文件干净利落不想装数据库的小项目实战基于pip安装pip install tinydb入门示例fromtinydbimportTinyDB,Query dbTinyDB(user.json)# 插入数据Python字典db.insert({name:张三,age:25,city:北京})db.insert({name:李四,age:30,city:上海})db.insert({name:王五,age:28,city:北京})UserQuery()resultsdb.search(User.city北京)print(results)db.update({age:26},User.name张三)db.remove(User.age26)db.close()注意事项非并发安全多线程慎用数据量大了几万条以上查询会慢不能像SQL那样做复杂的联表查询PickleDB纯Python开发、使用orjson模块实现持久化、开源GitHub1K Star135 Fork基于内存的键值存储库官方文档。把 Python 的pickle和轻量级数据库结合起来的键值存储纯Python 的键‑值库所有数据都序列化后写进一个.db文件打开时直接加载到内存里读写速度杠杠的。适用场景脚本、小项目、本地缓存。痛点PickleDB的解决方案部署麻烦只需pip install pickledb无需额外服务进程或配置文件学习成本高API超级简洁和普通Python字典差不多用起来像操作列表/字典性能瓶颈依赖orjson或json实现高速序列化几乎秒级写入/读取数据安全支持原子保存atomic write即使写文件时崩溃也不会导致数据库损坏异步需求AsyncPickleDB在async/await环境下也能顺滑操作优缺点分析优点缺点极简API上手几分钟和字典用法几乎一样❌全量加载数据全部放内存超大数据集会吃光RAM高速基于orjson序列化/反序列化毫秒级❌功能单一不支持事务、索引、复杂查询等高级特性原子保存写文件时崩溃也不怕数据损坏❌持久化方式单一只能是本地文件不支持网络复制或备份异步支持AsyncPickleDB兼容aiofiles❌社区相对小相比Redis、SQLite生态与插件少完全Pythonic支持字符串、列表、字典等原生类型❌不适合并发写多进程/多实例写同一个文件会冲突实战基于pip安装pip install pickledb入门示例importasynciofromfastapiimportFastAPIfrompickledbimportAsyncPickleDBimportpickledb dbpickledb.load(mydata.db,auto_dumpTrue)# auto_dump开启后每次改动自动保存db.set(name,小明)db.get(name)db.ladd(scores,85)# 列表操作db.lgetall(scores)# [85]db.dump()# 保存asyncdefdemo():dbawaitAsyncPickleDB.load(async.db)awaitdb.set(token,abc123)print(awaitdb.get(token))asyncio.run(demo())appFastAPI()dbpickledb.load(visits.db,auto_dumpTrue)app.get(/visit/{user})defrecord_visit(user:str):cntdb.get(user)or0db.set(user,cnt1)return{user:user,visits:db.get(user)}MenteeDB开源GitHub轻量级的本地数据库自带向量相似度搜索功能。风险提示目前该项目无人问津0 Star0 Fork本地简单测试实验生产环境谨慎使用。特性不用SQL纯Python链式调用自带向量搜索db.query(notes, vector_query数据库相关的内容)会自动按语义匹配返回结果数据存本地用MessagePack格式存储体积比JSON小50%左右读写也快还能加密支持AES-256-GCM加密无外部依赖实战基于pip安装pip install menteedb入门示例frommenteedbimportMenteeDB dbMenteeDB(base_path./data)db.create_table(table_namenotes,fields{title:str,body:str,tag:str},vector_fieldbody,)# vector_field指定支持向量搜索的字段db.insert(notes,{title:笔记1,body:向量数据库真香,tag:技术})db.insert(notes,{title:笔记2,body:今天吃了火锅,tag:生活})resultsdb.find(notes).where(tag,,技术).select(title,body).execute()注意事项目前最新版本0.2.0还比较新每个表只支持一个向量字段而且默认的向量生成用的是本地哈希算法不是那种真正懂语义的嵌入模型。如果要效果好可能得集成嵌入模型如sentence-transformers来生成向量。
返回列表