使用sqlite的json查询表达式

jx-sqlite的Python项目详细描述


使用sqlite的json查询表达式

动机

json是一种很好的存储数据的格式,并且已经非常流行。 不幸的是,数据库不能很好地处理它,通常一个人 必须先声明一个可以保存json的模式,然后才能 质疑。如果我们现在不被json的多样性所淹没,我们很快就会 将。会有更多不同形状的json,如 连接设备的数量(以及它们生成的信息) 继续增加。

概要

尝试将json文档存储在sqlite中,以便可以访问它们 通过SQL。希望这能为将军打下基础 文档关系映射(drm),并利用数据库的查询 优化器。jx sqlite还负责创建模式,并且 在遇到新的json模式时动态地更改它,并确保 对新模式的旧查询具有相同的含义。

最有趣、最重要的特性是我们查询嵌套的 对象数组,就好像它们只是另一个表一样。这对 两个原因:

  1. 内部对象{"a": {"b": 0}}是嵌套数组的快捷方式 {"a": [{"b":0}]},加上
  2. 模式可以从一对一扩展到一对多 {"a": [{"b": 0}, {"b": 1}]}

测试

有超过200种测试用于确认预期行为:它们 测试各种json表单,以及可以对其执行的查询 他们。大多数测试进一步分成三种不同的输出格式( 列表、表和多维数据集)。

如何使用:示例

QueryTable类创建表对象。两种有用的方法 QueryTable类的insert()query()。插入 数据,使用insert(docs)方法,其中docs是 要插入表中并进行查询的文档,请使用 query(your_query)方法,其中your_query是一个dict对象 以下是json查询表达式(请参阅有关json查询表达式的文档 下面)。为了更好地理解,这里显示了一个示例。以及 是的,不要忘记包装查询。

from jx_sqlite.query_table import QueryTable
from mo_dots import wrap
from copy import deepcopy

index = QueryTable("dummy_table")

sample_data = [
{"a": "c", "v": 13},
{"a": "b", "v": 2},
        {"v": 3},
        {"a": "b"},
{"a": "c", "v": 7},
{"a": "c", "v": 11}
]

index.insert(sample_data)

sample_query = {
"from": "dummy_table"
}

result = index.query(deepcopy(wrap(sample_query)))

安装

需要python2.7。可通过PYPI安装软件包,请参见下文:

pip install jx-sqlite

开始

这些说明将为您提供一份项目启动和运行的副本 用于开发和测试的本地机器。

$ git clone https://github.com/mozilla/jx-sqlite
$ cd jx-sqlite

运行测试

export PYTHONPATH=.
python -m unittest discover -v -s tests

贡献者

我们欢迎您的贡献!

许可证

这个项目是根据Mozilla公共许可,2.0版授权的。如果是副本 的MPL没有随此文件分发,您可以在 http://mozilla.org/MPL/2.0/

GSOC

在GSOC'17截止日期前完成的工作:*Pull Requests * Commits

未来工作Issues *The Future

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

推荐PyPI第三方库


热门话题
java为什么我不能从ObjectInputStream读取ArrayList?   linux如何设置java时区?   java是一种拥有系统的方法。出来在循环中打印不同的内容?   scala Apache Spark:在Java中有效地使用mapPartitions   java Maven对com的依赖性。白天利用率   java将多个数据映射到单个id的表的正式名称是什么?   java如何在Android应用程序中隐藏FulterWave API键   SeleniumWebDriverJava:如何使用行号和列号单击表中的特定单元格   java Springbatch将数据从写入程序或处理器传递到RestConroller   java在Android TextView中一次换行两行,并带有跨距   java如何使这个rxjava zip并行运行?   JAVAutil。登录中。记录器不尊重java。util。登录中。数量   java无法将参数发布到服务器   java Eclipse:在自定义透视图/视图的状态行上显示作业进度   java在调用findAll()时,找到了多个具有给定标识符的行,但如果我使用findById()遍历所有条目,则可以工作;   Java中的正则表达式问题   Java中的实例变量   java如何在安卓中逐字搜索   java如何计算百分比