从sql中提取解析树

moz-sql-parser的Python项目详细描述


moz sql解析器

让我们制作一个sql解析器,这样我们就可以为非sql数据存储提供一个熟悉的接口!

BranchStatus
masterBuild Status
devBuild Status

问题陈述

sql是一种常见的访问数据库的语言。虽然,每个数据库供应商都有其古怪的实现,但一般的开发人员并不知道足够多的sql来处理这些古怪的问题。这种熟悉的核心sql(如果您愿意的话,可以使用最低公分母)非常有用,足以以原始的方式探索数据。人们希望,一旦程序员用基本的sql查询检查了一个数据存储,并且他们看到了该数据的价值,他们就会有动机使用数据存储的本机查询格式。

目标

这个库的主要目标是将SQL-92查询的某些子集转换为json可解析树。一个足够大的子集,可以通过sql提供表面的数据访问,但不能像处理文档关系阻抗不匹配那样多。

非目标

  • 没有计划提供更新语句,比如updateinsert
  • 没有计划将该语言扩展到所有SQL:2011
  • 没有计划提供数据访问工具

项目状态

over 400 tests。这个解析器非常适合基本使用,包括内部查询。

当使用activedata数据源时,您可以在https://sql.telemetry.mozilla.org/处看到解析器正在工作

安装

pip install moz-sql-parser

用法

>>> from moz_sql_parser import parse
>>> import json
>>> json.dumps(parse("select count(1) from jobs"))
'{"select": {"value": {"count": 1}}, "from": "jobs"}'

每个sql查询都被解析为一个对象:每个子句都被赋给一个同名的对象属性。

>>> json.dumps(parse("select a as hello, b as world from jobs"))
'{"select": [{"value": "a", "name": "hello"}, {"value": "b", "name": "world"}], "from": "jobs"}'

SELECT子句是包含namevalue属性的对象数组。

运行测试

有关运行测试或编写新测试的说明,请参见the tests directory

有关实现的详细信息

sql查询被转换为json对象:每个子句都被分配给一个同名的对象属性。

# SELECT * FROM dual WHERE a>b ORDER BY a+b
{
    "select": "*", 
    "from": "dual", 
    "where": {"gt": ["a", "b"]}, 
    "orderby": {"value": {"add": ["a", "b"]}}
}

表达式也是对象,但只有一个属性:操作的名称,以及该操作的参数值(数组)。

{op: parameters}

您可以在前面的示例中看到这种模式:

{"gt": ["a","b"]}

注释

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

推荐PyPI第三方库


热门话题
java JMX MBean在应用程序部署时自动注册   java如何创建现有JavaFX对象的数组   IntelliJ的java单例线程安全吗   java将Base64编码字符串转换为PDF,无需使用Javascript中的任何库(IE兼容)   使用TestNG运行多个测试套件的java   java Firebase/Android:获取当前用户电子邮件   java如何捕获和传播通配符类型参数?   java如何在安卓中使用动画翻转图像   菜单和游戏活动之间的java延迟   java如何将对象转换为JSON(不包括属性)   java无法在可运行的JavaFX中更改接口   使用jsp/servlet的java清理URL?   java grpc示例是否打算跨语言使用?   java缺少目标JNDI名称   GridBagLayout中的java非均匀列   java如何在单独的线程中执行大量WS调用并增加单个结果变量?   以前使用数据导入数据时,java无法使用save()进行插入。sql   带有单独收集的java流过滤器