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 B
和a 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 查看散列)
关闭
sqltree-0.3.0.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 49c8e5912789d06825921dcc3711710a6a0927bce4d3f1afb78587cf12edc950 |
|
MD5 | c3597847863d88810e1c8e94d2d7b60f |
|
BLAKE2b-256 | fccbd554cc68e9902fbbb209c0c239dc8e1401f3b2f233fd5999690ed9498b05 |
关闭
sqltree-0.3.0-py2.py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 0ef6fdec6e6a1dbb7c5b2682752e954e886edacfc7e717f389e7fdd25f2e8acf |
|
MD5 | 7536303d4efeb13baec9ea95c86773ce |
|
BLAKE2b-256 | 31734ff58c610efbe00155bf7d5f7c739900b8f4147c15dacc07ba2f41b452b1 |