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对象。

bottle 0.5中的key-value数据库的更多相关文章

  1. Vue2.0 v-for 中 :key 到底有什么用?

    要解释 key 的作用,不得不先介绍一下虚拟 DOM 的 Diff 算法了. vue 和 react 的虚拟 DOM 的Diff算法大致相同,其核心是基于两个简单的假设: 1.两个相同的组件产生类似的 ...

  2. Redis中的批量删除数据库中的Key

    本文参考:http://blog.csdn.net/spring21st/article/details/15771861 http://stackoverflow.com/questions/575 ...

  3. Python:判断文本中的用户名在数据库中是否存在,存在返回1,不存在返回0

    下面是我写的python的一个小脚本,作用是:判断文本中的用户名在数据库中是否存在,存在返回1,不存在返回0.用的是MySQL数据库. 要注意的是:strip函数的使用,该函数的作用是去除字符串两端多 ...

  4. 批量删除Redis数据库中的Key

    批量删除KeyRedis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作 redis-cli keys &q ...

  5. 如何批量删除Redis数据库中的Key

    借助 Linux 的 xargs 指令来完成 redis-cli keys "*" | xargs redis-cli del //如果redis-cli没有设置成系统变量,需要指 ...

  6. 转载文章(Redis中对key的操作)

    转载地址:http://www.cnblogs.com/stephen-liu74/archive/2012/03/26/2356951.html 一.概述: 在该系列的前几篇博客中,主要讲述的是与R ...

  7. 如何解决Redis中的key过期问题

    最近我们在Redis集群中发现了一个有趣的问题.在花费大量时间进行调试和测试后,通过更改key过期,我们可以将某些集群中的Redis内存使用量减少25%. Twitter内部运行着多个缓存服务.其中一 ...

  8. NOSQL中的redis缓存数据库

    NOSQL概述 什么是NOSQL? NoSql(NoSQL=Not Only SQL),意思为"不仅仅是SQL",是一个全新的数据库理念,泛指非关系型的数据库. 为什么需要NOSQ ...

  9. nodejs中如何使用mysql数据库[node-mysql翻译]

    nodejs中如何使用mysql数据库 db-mysql因为node-waf: not found已经不能使用,可以使用mysql代替. 本文主要是[node-mysql]: https://www. ...

随机推荐

  1. acure使用

    打开,选择用IE浏览器,如果选择Chrome浏览器会提示让安装插件

  2. Vnpy官网汇总

    Vnpy首页:http://www.vnpy.cn/ Vnpy社区:https://www.vnpy.com/ Vnpy论坛:http://www.vnpie.com/forum.php Github ...

  3. 腾讯云centos7.2安装宝塔面板和LAMP

    1.安装好centos7.2系统后,登录centos系统输入如下命令: yum install -y wget && wget -O install.sh http://downloa ...

  4. linux与windows实现文件交互

    Linux--用SecureCRT来上传和下载文件 SecureCRT下的文件传输协议有以下几种:ASCII.Xmodem.Ymodem.Zmodem ASCII:这是最快的传输协议,但只能传送文本文 ...

  5. 修改 jenkins 主目录

    说明 Jenkins有时需要进行迁移,主目录会发生改变,本文主要讲解如何更改主目录.由于jenkins安装方式的不同,主目录也不一样.本测试环境:Centos6.8 X64.注意:在更改主目录之前,请 ...

  6. JS数组遍历

    1. forEach() 循环数组,不会改变元素,不会返回新数组 arr.foreach((value,index)=>{}) 2. map() 遍历数组,对每个元素进行处理,之后返回元素:会返 ...

  7. python中对文件和文件夹的操作

    一.说明 python中主要通过os模块和shutil模块两个模块对文件进行相关操作,移动.复制.删除.重命名.比较大的文件通过命令操作可以节省时间,提高效率. 二.实例对文件夹中文件的拷贝 from ...

  8. jsp的page、request、session、application四个作用域的作用

    1.page作用域也是最小的作用域,它只能在当前页面中使用. 2.request作用域主要是发送请求,但只能在两个页面之间发送一次请求. 3.session作用域是一个会话,也就是一个浏览器,意思是说 ...

  9. iOS 初探代码混淆(OC)

    iOS 初探代码混淆(OC) 前言 自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了.但是最近,客户方面提出了代码安全的要求.说是要做代码混淆,这 ...

  10. pycharm与python环境配置

    一.安装python开发环境 在win7的64位系统上安装,然后用cmd命令提示行输入python,出错,网上给出了解决方案,也操作成功了,但是比较麻烦,没关系,安装Anaconda3即可(默认安装即 ...