首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python3中使用SQL解析器解析任意SQL get列名和表名

如何在python3中使用SQL解析器解析任意SQL get列名和表名
EN

Stack Overflow用户
提问于 2020-03-24 06:09:51
回答 2查看 2.5K关注 0票数 2

我能够通过使用sql解析获得列名和表名,只对简单的select SQL进行解析。

有人能帮我吗?如何从任何复杂的SQL中获取列名和表名?

EN

Stack Overflow用户

发布于 2021-06-18 00:19:27

下面是一个从复杂的sql select语句中提取列名的解决方案。Python 3.9

代码语言:javascript
运行
复制
import sqlparse

def get_query_columns(sql):
    stmt = sqlparse.parse(sql)[0]
    columns = []
    column_identifiers = []

    # get column_identifieres
    in_select = False
    for token in stmt.tokens:
        if isinstance(token, sqlparse.sql.Comment):
            continue
        if str(token).lower() == 'select':
            in_select = True
        elif in_select and token.ttype is None:
            for identifier in token.get_identifiers():
                column_identifiers.append(identifier)
            break

    # get column names
    for column_identifier in column_identifiers:
        columns.append(column_identifier.get_name())

    return columns

def test():
    sql = '''
select
   a.a,
   replace(coalesce(a.b, 'x'), 'x', 'y') as jim,
   a.bla as sally  -- some comment
from
   table_a as a
where
   c > 20
'''
    print(get_query_columns(sql))

test()
# outputs: ['a', 'jim', 'sally']
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60822203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档