python中的持久压缩过期dict,由sqlite3和pickle备份,具有自动清理和自动清空语义
expiringsqlitedict的Python项目详细描述
一个围绕python的sqlite3数据库的轻量级包装器,带有一个简单的pythonic 类似于dict的接口。这个fork被修改为实现一个元表和 自动过期和清空语义,以及一些适当的锁定。 这也会自动压缩值。
>>>fromexpiringsqlitedictimportSqliteDict>>>withSqliteDict('./my_db.sqlite',autocommit=True)asmydict:>>>mydict['some_key']=any_picklable_object>>>printmydict['some_key']# prints the new value>>>forkey,valueinmydict.iteritems():>>>printkey,value>>>printlen(mydict)# etc... all dict functions work
pickle在内部用于(反)序列化值。键是任意字符串, 值任意可pickle对象。必须在上下文中使用 经理。
功能
值可以是任何可选取对象(使用具有最高协议的cPickle)。
支持使用锁文件从多个程序或线程访问。
支持自定义序列化或压缩:
# use JSON instead of pickle>>>importjson>>>mydict=SqliteDict('./my_db.sqlite',encode=json.dumps,decode=json.loads)# apply zlib compression after pickling>>>importzlib,pickle,sqlite3>>>defmy_encode(obj):...returnsqlite3.Binary(zlib.compress(pickle.dumps(obj,pickle.HIGHEST_PROTOCOL)))>>>defmy_decode(obj):...returnpickle.loads(zlib.decompress(bytes(obj)))>>>mydict=SqliteDict('./my_db.sqlite',encode=my_encode,decode=my_decode)
安装
除了python本身之外,模块没有其他依赖项。
使用以下命令安装或升级:
pip install expiringsqlitedict
或者从source tar.gz:
python setup.py install
文档
模块中有标准的python文档字符串:
>>>importexpiringsqlitedict>>>help(expiringsqlitedict)
(但实际上,只有提交的dict。
当心:由于python的语义,expiringsqlitedict无法知道何时 在RAM中修改了一个可变的sqlitedict支持的条目。例如, mydict.setdefault('new_key',[]).append(1)将离开mydict['new_key'] 等于空列表,而不是[1]。您需要显式地指定 对象返回到sqlitedict以获得相同的效果:
>>>val=mydict.get('new_key',[])>>>val.append(1)# sqlite DB not updated here!>>>mydict['new_key']=val# now updated
对于开发人员
安装:
# pip install nose # pip install coverage
执行所有测试:
# make test-all
要在覆盖范围内执行所有测试:
# make test-all-with-coverage
评论、错误报告
expiringsqlitedict驻留在github上。您可以提交问题或 那里有要求。
expiringsqlitedict是在 Apache 2.0 license。 版权所有(c)2011-2018Radim Řehůřek和 贡献者。本叉子版权的变化(c)2018年绝对表现, 股份有限公司