我试图从SQL查询中提取表名,但在使用诸如sqlparse之类的Python SQL解析器时遇到了一些困难。问题出在别名上--解析器会混淆真实的表名及其别名,只返回别名。
我的目标不是编辑解析器,而是使用正则表达式预先清除SQL查询中的别名,以便解析器可以执行其工作。
我也不需要将查询中的所有别名调用重命名为原始名称,因为此解析的上下文只需要表名,而不需要其他名称。
为了使其显式,给定以下查询(以字符串形式):
SELECT * FROM schema.table alias正则表达式将返回:"SELECT * FROM schema.table“-然后将其发送以进行进一步处理以获取表名。如果没有别名,例如:
SELECT * FROM schema2.table2然后,它会原封不动地返回字符串。
我该怎么做呢?有没有其他的python sql解析器能够通过别名来处理这个问题呢?
发布于 2019-06-07 03:09:08
这对你有效吗?它搜索包含字符串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.tablehttps://stackoverflow.com/questions/56483450
复制相似问题