首页 > 解决方案 > 在 Python 中将 SQL 语句解析为 JSON 格式?

问题描述

我需要从 SQL 语句中提取所有访问的表(具有不同类型的复杂性),但我需要知道该表来自哪个令牌,例如,如果有以下查询:

CREATE TABLE TABLE_B AS B SELECT * FROM (SELECT * FROM (SELECT * FROM table_A, table_B WHERE (SELECT * FROM table_X LEFT JOIN TABLE_C ON atrb))) WHERE (SELECT * FROM table_X LEFT JOIN TABLE.C ON atrb)

我的场景的预期输出是:

['TABLE_B', 'TABLE_A']

因为我不希望在 where 语句中访问表。

所以我认为一个很好的替代方法是将我的 sql 语句解析为 JSON 格式,例如:

{"CREATE":{'table_name':'TABLE_B', 'SELECT': {'columns': '*', 'FROM': {'SELECT':'columns':'*','FROM':['TABLE_A','TABLE_B'],'WHERE':{'SELECT': .... }}}}

像这样对我来说访问所有语句并忽略这些语句对我来说没有用,就像在 WHERE 语句中访问的表一样。

我已经尝试过一些像 sql_metadata 这样的库,但是它返回了所有的表,我不知道它来自哪个语句。

你能帮助我吗?

标签: pythonsqljson

解决方案


这个包可以帮助你:

https://github.com/andialbrecht/sqlparse

它不会将 SQL 查询转换为 JSON,但它为您提供了一个结构,您可以使用该结构来访问每个语句部分,使用模块的 parse 函数。

您也可以从这里开始构建您的 JSON 结构。


推荐阅读