在python sqlparse库中获取标记类型

p3rjfoxz  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(122)

我正在使用Python中的SQL代码解析器进行进一步的代码分析。我决定使用“sqlparse”Python库,在解析文本后,我想知道特定的标记类型,如“标识符”,“关键字”,.
全球跑步后:

raw = 'select * from foo join fuu on foo.id = fuu.id where id in (select id from bar);'
 statements = sqlparse.parse(raw)
 print(statements[0].tokens)

字符串
我可以看到:

[<DML 'select' at 0x298851E3DC0>, <Whitespace ' ' at 0x2988523C400>, <Wildcard '*' at 0x2988523C100>, <Whitespace ' ' at 0x2988523C160>, <Keyword 'from' at 0x2988523C1C0>, <Whitespace ' ' at 0x2988523CB20>,


标记是“空白”还是任何其他类型都是可见的。但是只有在打印语句中打印整个列表时才可见。我如何在代码中获得信息,无论它是空白,关键字还是其他类型?
我尝试了库中的多个函数,但仍然无法获得。(库的文档)https://buildmedia.readthedocs.org/media/pdf/sqlparse/latest/sqlparse.pdf
存在ttype之类的东西,但它不起作用。一个标记是type <class 'sqlparse.sql.Token'>。
有什么建议吗?

a1o7rhls

a1o7rhls1#

我自己对sqlparse还是个新手,但这是我的解决方案。如果你知道如何改进它,请留下评论!

def get_token_type(sql_query: str = None, tokens: list = None, type_list: list = None) -> list:
statements = tokens or sqlparse.parse(sql_query.strip())[0]
type_list = type_list or []
for token in statements:
    if token.ttype:
        type_list.append(token.ttype)
    else:
        get_token_type(tokens=token.tokens, type_list=type_list)
return type_list

字符串

相关问题