使用sqlite的json查询表达式
jx-sqlite的Python项目详细描述
使用sqlite的json查询表达式
动机
json是一种很好的存储数据的格式,并且已经非常流行。 不幸的是,数据库不能很好地处理它,通常一个人 必须先声明一个可以保存json的模式,然后才能 质疑。如果我们现在不被json的多样性所淹没,我们很快就会 将。会有更多不同形状的json,如 连接设备的数量(以及它们生成的信息) 继续增加。
概要
尝试将json文档存储在sqlite中,以便可以访问它们 通过SQL。希望这能为将军打下基础 文档关系映射(drm),并利用数据库的查询 优化器。jx sqlite还负责创建模式,并且 在遇到新的json模式时动态地更改它,并确保 对新模式的旧查询具有相同的含义。
最有趣、最重要的特性是我们查询嵌套的 对象数组,就好像它们只是另一个表一样。这对 两个原因:
- 内部对象{"a": {"b": 0}}是嵌套数组的快捷方式 {"a": [{"b":0}]},加上
- 模式可以从一对一扩展到一对多 {"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/。