使用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文件分块,获取长度字节   java嵌入式Tomcat不执行jsf页面   java我的数据库中有2个实体,但hibernate返回其中6个。   java如何基于逗号拆分字符串   java取消已经运行的CompletableFutures的预期模式是什么   java如何在informix中从另一个数据库复制表ddl和数据   为什么图片是黑色的?   java根据字符串数组中的单词筛选列表   Java8的集合。平行流有效吗?   Kotlin中的java静态内部类   java如何在GUI中生成一列字符串   javafx如何正确使用高对比度主题?   带空格的javascript Httpurlconnection参数   java如何设置GridBagLayout的约束   java如何在一个线程可能尚未初始化时关闭另一个线程   java将简单时间格式转换为特殊时间格式(hhmmt)   安卓/java阵列重复过滤器的问题   java在队列的链接实现下,入队和出队是如何工作的   java更新sql外键约束