博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bottle 0.5中的key-value数据库
阅读量:4454 次
发布时间:2019-06-07

本文共 2164 字,大约阅读时间需要 7 分钟。

import anydbm as dbmimport cPickle as pickleclass 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            raisebb = BottleBucket("testbucket") # 打开testbucket.db,读取其中内容。若testbucket.db不存在,则会创建一个。print bb.a      # 读取其中的内容print bb["b"]   # 另一种读取方式bb.c = 999      # 更新(增加)内容bb["d"]=666     # 另一种更新方式bb.save()       # 将数据pickle后保存到testbucket.db中,数据类型支持Python对象。

 

转载于:https://www.cnblogs.com/tuzkee/p/6433994.html

你可能感兴趣的文章
我爱 哐 哐 哐,我是哐人类!-【废话区】
查看>>
WinPE启动U盘的制作方法与软件下载(通用PE工具箱/老毛桃/大白菜WinPE)(转载)...
查看>>
行为型设计模式之5--中介者模式
查看>>
Android DevArt6:Android中IPC的六种方式
查看>>
oracle练习题
查看>>
PMP学习感想
查看>>
Zookeeper全解析——Paxos作为灵魂
查看>>
集合-强大的集合工具类:java.util.Collections中未包含的集合工具
查看>>
CSS清除浮动
查看>>
数据库基础-数据库常用命令总结
查看>>
java8 按对象属性值排序
查看>>
[转帖]nvidia nvlink互联与nvswitch介绍
查看>>
[cnblog新闻]历史性时刻:云硬件支出首次高于传统硬件
查看>>
[转帖]Oracle dba_objects和all_objects 最大的区别
查看>>
【转帖】国产x86处理器KX-6000发布
查看>>
RSA算法及其在iOS中的使用
查看>>
04-js的运算符
查看>>
第三天 while循环 及其用法
查看>>
Delphi 10 seattle 去掉自带的代码连接线
查看>>
构建高并发高可用的电商平台架构实践(转)
查看>>