python sqlparse解析sql得到表名

sql = """
select K.a,K.b from (select H.b from (select G.c from (select F.d from
(select E.e from A, B, C, D, E), F), G), H), I, J, K order by 1,2;
"""

import sqlparse
from sqlparse.sql import IdentifierList, Identifier, Where
from sqlparse.tokens import Keyword, DML


def is_subselect(parsed):
    if not parsed.is_group:
        return False
    for item in parsed.tokens:
        if item.ttype is DML and item.value.upper() == 'SELECT':
            return True
    return False


def extract_from_part(parsed):
    from_seen = False
    for item in parsed.tokens:
        if from_seen:
            if is_subselect(item):
                for x in extract_from_part(item):
                    yield x
            elif item.ttype is Keyword:
                raise StopIteration
            else:
                yield item
        elif item.ttype is Keyword and item.value.upper() == 'FROM':
            from_seen = True


def extract_table_identifiers(token_stream):
    for item in token_stream:
        if isinstance(item, IdentifierList):
            for identifier in item.get_identifiers():
                yield identifier.get_name()
        elif isinstance(item, Identifier):
            yield item.get_name()
        # It's a bug to check for Keyword here, but in the example
        # above some tables names are identified as keywords...
        elif item.ttype is Keyword:
            yield item.value


def extract_tables(sql):
    stream = extract_from_part(sqlparse.parse(sql)[0])
    return list(extract_table_identifiers(stream))

if __name__ == '__main__':
    print 'Tables: %s' % ', '.join(extract_tables(sql))

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
解析SQL语句提取表名并将结果输出到文本文件,可以使用编程语言(如Python)中的SQL解析库进行操作。 首先,需要安装并导入相应的SQL解析库,例如`sqlparse`库。 然后,读取SQL语句的文本文件(假设名为`sql_query.sql`),将其内容存储在一个字符串变量中。 接下来,使用`sqlparse`库的`parse`函数对SQL语句进行解析,将解析的结果保存在一个变量中。 通过遍历解析结果,我们可以提取出SQL语句中的每个表名,并将其存储在一个列表中。 最后,将提取出的表名列表中的每个表名按行输出到一个文本文件中,这样就完成了将表名提取并输出的操作。 下面是一个示例代码: ```python import sqlparse # 读取SQL语句的文本文件 with open('sql_query.sql', 'r') as file: sql_query = file.read() # 解析SQL语句 parsed_query = sqlparse.parse(sql_query) # 提取表名 table_names = [] for statement in parsed_query: for token in statement.tokens: if token.is_group() and token.get_real_name() == 'FROM': for identifier in token.get_identifiers(): table_names.append(identifier.get_real_name()) # 输出表名到文本文件 output_file = 'table_names.txt' with open(output_file, 'w') as file: for table_name in table_names: file.write(table_name + '\n') print(f"成功将表名提取并输出到了文件:{output_file} 中") ``` 在上述代码中,需要将SQL语句的文本文件命名为`sql_query.sql`,并将输出的文本文件命名为`table_names.txt`。请确保路径正确,并确保能够在运行该代码时正确安装并导入`sqlparse`库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值