(动态模式)dict->sqlite3库

DictLiteStore的Python项目详细描述


dictlitestore

用于在可查询文件中存储python dict的动态schema sqlite后端 数据库。

dict中的所有值都存储为json值 在数据库中,但是键被映射到表列中,因此您可以 查询一些东西,尽管它仍然很容易解析。

当您试图添加一个dict,该dict的键不在表中 它将自动添加这些列。

所以一句话:

{'author': 'dan',
 'project': 'DictLiteStore',
 'categories': ['python', 'dict', 'persistance']
}

在数据库中成为:

AUTHORPROJECTCATEGORIES
^{tt1}$^{tt2}$^{tt3}$

这很酷,因为您可以使用普通的sql来查询内容。

SELECT * FROM 'dict_store' WHERE 'author' == '"dan"'

例如。(注意查询值周围的引号。) 简单包装sql select函数(get),如果 不想自己运行类型sql。请参阅下面的用法部分。

因为数据是json格式的,即使对于列表(比如类别),您也可以 也可以很容易地查询。在中搜索“python”的所有行 比如说,分类。sqllite全文搜索相当快。 你不能从一对多的关系中得到性能上的好处 查询,但如果您处于性能关键型环境中,则 无论如何,应该是在看一个真正的SQL服务器。

当数据从sqllite返回时,如果使用 dictlitestore模块中的“get”函数,它将重新转换 jsonified值(比如“categories”列表)返回到python中 列表。这很有用。:-)

dictlitestore最初只是在 Marlinespike的缓存系统,但作为一个独立的模块, 对许多数据存储系统都很有用。

用法:

记录数据:

foo = {'title': 'Foo the first', 'dict':'Bar Bar Bar'}

with DictLiteStore('data.db', 'table_of_random_stuff') as bucket:
    bucket.store(foo)

现在字典'foo'作为一行存储在data.db中 您可以直接使用sqllite查询来访问数据, 或者有一个非常简单的select包装器,它可以帮助 资料:

bucket.get(('title','LIKE',NoJSON('%Foo%')))

返回

[{'title':'Foo the first','dict':'Bar Bar Bar'}]

要更新表,还可以使用update()方法:

bucket.update({'title':'updated title'})

将更新all行以获得新标题。我们可以用where子句 就像在Get中限制伤害:

bucket.update({'title': 'updated title'},
              True,
              ('title', '==', 'old title'))

你想知道那随机的“真”是为了什么?

update方法需要知道您是否希望它编写dict(插入它) 如果where子句失败,则返回到表中。如果你只想更新,而不是 如果没有匹配的行,请插入,然后按如下方式运行更新:

bucket.update({'title':'updated title'},
              False,
              ('title','==','old title'))

注:

  • 所有数据在写入之前都被序列化为json,然后在退出时被反序列化。 这意味着字符串周围会有额外的引号。可能有更好的办法, 但我不太确定是否最有效。(尝试反序列化,如果不起作用, 留作绳子?误报太多了,我会想……。
  • 所有不可jsonal的数据都先进行字符串化,然后进行json'd。
  • 目前很少发生错误检查。在生产之前,这需要 边缘有很多支撑物。
  • 我需要做一些性能实验!这到底有多管用,速度方面?

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

推荐PyPI第三方库


热门话题
xml Java:如何忽略标记前缀   java Android Sqlite3列由命令行创建,但不是从我的Android代码创建的   java Picasso视图无法在DataAdapter内转换为上下文   java如何在jar文件中修改Android类而无需解包?   如何编辑已编译的Java字节码?   java如何在Android的ExpandableListView中保存子视图onGroupCollaped()中的数据   java Spring启动程序缓存速度缺失?   java相对于返回,Finally块何时运行   为继承层次结构建模。。。JAVA   java将值从内部递归方法传递到外部方法   根据作为参数传递的标志执行各种操作的java设计模式   java如何使用循环显示最大和最小的数字?   简化java if语句   java录制flv断开红色5   java如何在Android中添加图像以列出视图项?   java我如何获得Android中从广播组检查的最后一个单选按钮?   通过ResultSet反向检索数据时发生java NullPointerException   java可以处理Android。打包文件?   java如何构建JNI。动态链接库?   javascript当前请求不是多部分请求