bottle 0.5中的key-value数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | import anydbm as dbm import cPickle as pickle class BottleBucket( object ): '''Memory-caching wrapper around anydbm''' def __init__( self , name): self .__dict__[ 'name' ] = name self .__dict__[ 'db' ] = dbm. open ( '%s.db' % name, 'c' ) self .__dict__[ 'mmap' ] = {} def __getitem__( self , key): if key not in self .mmap: self .mmap[key] = pickle.loads( self .db[key]) return self .mmap[key] def __setitem__( self , key, value): self .mmap[key] = value def __delitem__( self , key): if key in self .mmap: del self .mmap[key] del self .db[key] def __getattr__( self , key): try : return self [key] except KeyError: raise AttributeError(key) def __setattr__( self , key, value): self [key] = value def __delattr__( self , key): try : del self [key] except KeyError: raise AttributeError(key) def __iter__( self ): return iter ( self .ukeys()) def __contains__( self , key): return key in self .ukeys() def __len__( self ): return len ( self .ukeys()) def keys( self ): return list ( self .ukeys()) def ukeys( self ): return set ( self .db.keys()) | set ( self .mmap.keys()) def save( self ): self .close() self .__init__( self .name) def close( self ): for key in self .mmap.keys(): pvalue = pickle.dumps( self .mmap[key], pickle.HIGHEST_PROTOCOL) if key not in self .db or pvalue ! = self .db[key]: self .db[key] = pvalue self .mmap.clear() self .db.close() def clear( self ): for key in self .db.keys(): del self .db[key] self .mmap.clear() def update( self , other): self .mmap.update(other) def get( self , key, default = None ): try : return self [key] except KeyError: if default: return default raise bb = BottleBucket( "testbucket" ) # 打开testbucket.db,读取其中内容。若testbucket.db不存在,则会创建一个。 print bb.a # 读取其中的内容 print bb[ "b" ] # 另一种读取方式 bb.c = 999 # 更新(增加)内容 bb[ "d" ] = 666 # 另一种更新方式 bb.save() # 将数据pickle后保存到testbucket.db中,数据类型支持Python对象。 |
分类:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?