python - 在 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 这样的库,但是它返回了所有的表,我不知道它来自哪个语句。
你能帮助我吗?
解决方案
这个包可以帮助你:
https://github.com/andialbrecht/sqlparse
它不会将 SQL 查询转换为 JSON,但它为您提供了一个结构,您可以使用该结构来访问每个语句部分,使用模块的 parse 函数。
您也可以从这里开始构建您的 JSON 结构。
推荐阅读
- javascript - 执行innerHTML数字输入的计算
- python - python循环列表(显示工作日的总30天)
- c - mpi 进程在信号 11 上退出
- wordpress - 在 woocommerce 的页面中显示缺货产品
- jquery - 使用 jquery 删除两个父 div
- react-native - React Navigation 中的动态路由
- python - 用完成的多个循环替换 for 循环中的部分字符串
- python - 剥离一些标签并重命名它们
- spring-boot - Spring boot微服务中连接Pivotal Coud Cache集群所需的配置或链接
- php - Laravel 6 Eloquent 模型序列化忽略访问器