我已经用库做了类似的事情 语法分析法(sqlparse .基本上,这个库接受你的SQL查询并将其标记化。一旦完成,你就可以搜索选择查询标记并解析底层标记。 在代码中,这读起来像
import sqlparse
def find_selected_columns(query) -> list[str]:
tokens = sqlparse.parse(query)[0].tokens
found_select = False
for token in tokens:
if found_select:
if isinstance(token, sqlparse.sql.IdentifierList):
return [
col.value.split(" ")[-1].strip("`").rpartition('.')[-1]
for col in token.tokens
if isinstance(col, sqlparse.sql.Identifier)
else:
found_select = token.match(sqlparse.tokens.Keyword.DML, ["select", "SELECT"])
raise Exception("Could not find a select statement. Weired query :)")
这段代码也应该适用于带有通用表表达式的查询,也就是说,它只返回最后的选择列。
根据你使用的SQL方言和引号,你可能需要调整col.value.split(" ")[-1].strip("`").rpartition('.')[-1]这一行。