bottle 0.5中的key-value数据库
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数据库的更多相关文章
- Vue2.0 v-for 中 :key 到底有什么用?
要解释 key 的作用,不得不先介绍一下虚拟 DOM 的 Diff 算法了. vue 和 react 的虚拟 DOM 的Diff算法大致相同,其核心是基于两个简单的假设: 1.两个相同的组件产生类似的 ...
- Redis中的批量删除数据库中的Key
本文参考:http://blog.csdn.net/spring21st/article/details/15771861 http://stackoverflow.com/questions/575 ...
- Python:判断文本中的用户名在数据库中是否存在,存在返回1,不存在返回0
下面是我写的python的一个小脚本,作用是:判断文本中的用户名在数据库中是否存在,存在返回1,不存在返回0.用的是MySQL数据库. 要注意的是:strip函数的使用,该函数的作用是去除字符串两端多 ...
- 批量删除Redis数据库中的Key
批量删除KeyRedis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作 redis-cli keys &q ...
- 如何批量删除Redis数据库中的Key
借助 Linux 的 xargs 指令来完成 redis-cli keys "*" | xargs redis-cli del //如果redis-cli没有设置成系统变量,需要指 ...
- 转载文章(Redis中对key的操作)
转载地址:http://www.cnblogs.com/stephen-liu74/archive/2012/03/26/2356951.html 一.概述: 在该系列的前几篇博客中,主要讲述的是与R ...
- 如何解决Redis中的key过期问题
最近我们在Redis集群中发现了一个有趣的问题.在花费大量时间进行调试和测试后,通过更改key过期,我们可以将某些集群中的Redis内存使用量减少25%. Twitter内部运行着多个缓存服务.其中一 ...
- NOSQL中的redis缓存数据库
NOSQL概述 什么是NOSQL? NoSql(NoSQL=Not Only SQL),意思为"不仅仅是SQL",是一个全新的数据库理念,泛指非关系型的数据库. 为什么需要NOSQ ...
- nodejs中如何使用mysql数据库[node-mysql翻译]
nodejs中如何使用mysql数据库 db-mysql因为node-waf: not found已经不能使用,可以使用mysql代替. 本文主要是[node-mysql]: https://www. ...
随机推荐
- oralce问题
死锁,如果较多使用存储过程杀死 create or replace procedure killer is v_obj varchar2(200); v_sql varchar2(500) ...
- 双重ScrollView,RecyclerView联动实例
最近收到一个需求,如图,大家一看,不就是一个简单的表格吗,RecyclerView就搞定了 我一开始也是这么想的,但是当我继续听下去 需求是左边党支部栏目只能上下滑动,之后联动右边下方表格一起上下滑动 ...
- impdp导入dmp数据实例
--创建表空间 create tablespace ALIX datafile 'F:\File\ALIX.ora' size 1000m; --创建数据库目录 create directory ex ...
- ERP新人防坑指南
本文作为初入ERP行业的新人的防坑指南,讲解了一些常见犯的错,这样也少走一些弯路,如果你是老鸟,请绕过 :-) 本文关联的代码使用kotlin编写,请自行转换为c#.java等你熟悉的语言,表述的坑在 ...
- 磁盘当前目录下存在文件 c1.txt,其中存放了一段英文文字。请编程实现将c1.txt中英文文字全部转换为答谢字母,并保存到c2.txt中。要求:c2.txt文件前面保存的是c1.txt文案中的原始文字,后面紧跟着的是转换后的文字
#include"stdio.h"#include"string.h" void main(){ FILE *fp1,*fp2; char ch[1000]=& ...
- popstate事件在低版本webkit中的调用
popstate是H5的history系列中的事件,但是在低版本的webkit中会自动触发.H5中的history api是不会使页面发生跳转的,只是操作地址栏和响应的state属性而已,而且是手动操 ...
- 在CentOS 7 上设置返回上一级目录的快捷键为 Backspace
参考这里. 编辑文件: $ vi ~/.config/nautilus/accels 找到这一行: ; (gtk_accel_path "<Actions>/ShellActi ...
- 微信浏览器无法下载APK文件的解决方案
大家是不是经常会遇到微信内点击链接或扫描二维码无法打开指定网页的问题?只要你使用微信转发分享,相信你就一定会遇到,那么打不开的原因很简单了,就是被微信拦截了.这个问题我们只需要实现从微信内直接跳出到外 ...
- Jsoup解析获取品花社图片
Jsoup解析获取品花社图片 emmmm,闲着没事,想起了之前一个学长做的品花社的APP,刚好之前有了解Jsoup这个Java解析HTML的库,便花了三四个小时写了这个东西,把网站上大大小小的MM的图 ...
- python小总结4(文件)
一.读文件 过程: a.打开文件:open() b.读取文件内容:read() readline() readlines() c.关闭文件:close() open(path,flag,encodin ...