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年绝对表现, 股份有限公司

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在href中将struts2文本字段的值作为参数传递?   java检查对象属性是否为空的最佳方法是什么?   java通过Maven使用Junit类别运行Cucumber测试   java如何在selenium Webdriver(Mac)中使用Robot类上传多个文件?   如何用python绘制图形或将python转换为java和Matlab?   java Osgi捆绑包更新和ResourceBundle   java使用流api将流<@Nullable T>转换为流<@NonNull T>   java中EXCEL的平台无关连接字符串   JavaFX中的java表   java Jetty线程池和sun。HttpServer会话   JPA存储库bean的java Spring注入无法工作NullPointerException   java从另一个Kubernetes作业触发Kubernetes   我的java netbeans抽奖计划需要帮助吗   泛型中的java有界类型无法扩展另一个有界类型   如果混合使用全局构建和概要文件构建,java cxfcodegenplugin会生成错误代码   封装SQL平台之间差异的java策略?