【发布时间】:2020-10-22 00:12:23
【问题描述】:
我需要从 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 这样的库,但是它返回了所有的表,我不知道它来自哪个语句。
你能帮帮我吗?
【问题讨论】: