1

我正在尝试从 SQL 查询中提取表名,并且在使用 Python SQL 解析器(如 sqlparse)时遇到了一些困难。问题在于别名 - 解析器会将真实表名与其别名混淆,并仅返回别名。

我的目标不是编辑解析器,而是预先使用正则表达式从 SQL 查询中清除别名,以便解析器可以完成其工作。

我也不需要将查询中的所有别名调用重命名为原始名称,因为此解析的上下文只需要表名而无需其他任何内容。

为了明确起见,给定这个查询(作为字符串):

SELECT * FROM schema.table alias

正则表达式将返回:“SELECT * FROM schema.table” - 然后将其发送以进行进一步处理以获取表名。如果没有别名,如:

SELECT * FROM schema2.table2

然后它将返回未更改的字符串。

我该怎么做?是否有任何其他 python sql 解析器能够使用别名处理这个问题?

4

1 回答 1

0

这对你有用吗?它搜索包含字符串的行FROM schema.table alias删除别名

import re
string = """
SELECT * FROM schema.table alias
SELECT * FROM schema.table
"""
remove_table_alias = r'(FROM \w+\.\w+)(\s\w+)$'
print(re.sub(remove_table_alias, r'\1', string, flags=re.MULTILINE))

输出:

SELECT * FROM schema.table 
SELECT * FROM schema.table
于 2019-06-06T19:09:07.860 回答