跳转到主要内容

SQL解析器。

项目描述

sqltree

sqltree是一个实验性的SQL解析器,为SQL查询提供语法树。可能的用例包括

  • 静态分析(例如,验证列名)
  • 将查询转换为另一种SQL方言
  • 自动格式化

sqltree可以解析查询

$ python -m sqltree "SELECT * FROM x WHERE x = 3"
Select(select_exprs=[SelectExpr(expr=Star(), alias=None)], table=Identifier(text='x'), conditions=BinOp(left=Identifier(text='x'), op=Punctuation(text='='), right=IntegerLiteral(value=3)))

并格式化它们

$  python -m sqltree.formatter "SELECT * from x where x=3"
SELECT *
FROM x
WHERE x = 3

SQL是一个庞大的语言,其语法在不同数据库供应商之间差异很大。sqltree旨在足够灵活,以解析不同数据库支持的完整语法,但我将优先考虑解析器中使用的结构。到目前为止,这意味着主要关注解析MySQL 8查询。随着我有时间,将添加更多语法。

功能

sqltree的一些有用功能包括

占位符支持

sqltree支持在查询的各种位置使用占位符,如%s?,以便可以使用这些占位符格式化和分析查询。

$ python -m sqltree.formatter 'select * from x where y = 3 %(limit)s'
SELECT *
FROM x
WHERE y = 3
%(limit)s

更好的错误消息

sqltree的手动解析器通常比MySQL本身产生更好的错误消息。例如

$ mysql
mysql> show replicca status;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'replicca status' at line 1
$ python -m sqltree 'show replicca status'
Unexpected 'replicca' (expected one of REPLICA, SLAVE, REPLICAS, TABLES, TABLE, TRIGGERS, VARIABLES, STATUS, COUNT, WARNINGS, ERRORS, COLUMNS, FIELDS, INDEX, INDEXES, KEYS)
0: show replicca status
        ^^^^^^^^

API

  • sqltree.sqltree:解析SQL查询并返回解析树。有关可能的解析节点,请参阅sqltree.parser
  • sqltree.formatter.format:重新格式化SQL查询。
  • sqltree.tools.get_tables:获取SQL查询中引用的表。

更多详细文档将随后提供。

要求

sqltree在Python 3.6及更高版本上运行,并且没有依赖项。

使用fixit规则

sqltree嵌入了一个fixit规则用于格式化SQL。以下是使用方法

  • 如果您还没有安装fixit,请先安装它
    • pip install fixit
    • python -m fixit.cli.init_config
  • 运行python -m fixit.cli.apply_fix --rules sqltree.fixit.SqlFormatRule path/to/your/code

变更日志

版本 0.3.0 (2022年7月12日)

  • 支持ANSI SQL方言
  • 支持在字符串字面量中通过双重引号进行转义
  • 支持带有负指数的科学记数法
  • 修复包含非字母数字字符的引号标识符的格式
  • 支持一元 NOT 运算符
  • 修复 LEFT JOIN 和类似查询的格式

版本 0.2.0 (2022年6月24日)

  • 支持 SELECT ... INTO 语法
  • 支持 SET TRANSACTION 语法
  • 支持 a MOD Ba DIV b 语法
  • 支持 GROUP_CONCAT() 语法

版本 0.1.0 (2022年6月13日)

  • 初始发布

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

sqltree-0.3.0.tar.gz (36.8 kB 查看散列)

上传时间

构建分发

sqltree-0.3.0-py2.py3-none-any.whl (39.2 kB 查看散列)

上传时间 Python 2 Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面