使用sqlpar从Python中的SQL查询中提取所有列名

2024-10-01 07:17:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个给定的SQL查询(从MySQL开始)提取所有列名。我在python中使用sqlparser模块。在

我有一个简单的代码来获取列,直到到达“from”关键字为止。如何从查询的其余部分获取列名。在

def parse_sql_columns(sql):
    columns = []
    parsed = sqlparse.parse(sql)
    stmt = parsed[0]
    for token in stmt.tokens:
        if isinstance(token, IdentifierList):
            for identifier in token.get_identifiers():
                columns.append(str(identifier))
        if isinstance(token, Identifier):
            columns.append(str(token))
        if token.ttype is Keyword:  # from
            break
    return columns

示例查询:

^{pr2}$

预期产量:

["test", "ru.iuserid AS passengerid", "ru.vimgname", "tr.itripid", "rate.itripid","ru.iuserid", "tr.iuserid","tr.idriverid", "tr.iactive", "tr.ehailtrip", "rate.eusertype", "tr.itripid"]

我面临的另一个问题是“where子句没有被这个解析器正确地处理。它没有被标识为关键字,因此,我无法从中清楚地提取信息


Tags: columnsinfromtokenforsqlifparse