You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式提取SQL别名前后的表名与列名并生成DataFrame

解决SQL视图语句的表名、别名与列名分组问题

原始SQL字符串

CREATE VIEW [dbo].[TestView] AS SELECT T1.Col1,T1.Col2,T2.Col1,T2.Col2,T3.Col1,T3.Col2
FROM table_1 T1 LEFT JOIN table_2 T2 ON T1.Col1 = T2.Col2 INNER JOIN Table_3 T3 
ON T1.Col2 = T3.Col2

目标结果

期望生成如下格式的DataFrame(注:你给出的目标结果中存在列名重复笔误,以下为修正后的正确对应关系):

TableName    Alias     ColumnName
  table_1     T1         Col1
  table_1     T1         Col2
  table_2     T2         Col1
  table_2     T2         Col2
  table_3     T3         Col1
  table_3     T3         Col2

解决思路与实现代码

核心思路

分两步提取关键信息,再做关联映射:

  1. 从SQL的FROM/JOIN片段提取表名-别名的对应关系
  2. 从SQL的SELECT片段提取别名-列名的组合
  3. 通过别名将两组信息关联,最终生成目标DataFrame

具体实现代码

import re
import pandas as pd

# 原始SQL字符串
s = """CREATE VIEW [dbo].[TestView] AS SELECT T1.Col1,T1.Col2,T2.Col1,T2.Col2,T3.Col1,T3.Col2
FROM table_1 T1 LEFT JOIN table_2 T2 ON T1.Col1 = T2.Col2 INNER JOIN Table_3 T3 
ON T1.Col2 = T3.Col2"""

# 1. 提取表名与别名的映射关系
# 匹配FROM/JOIN后 表名+别名 的结构,兼容大小写
table_alias_pattern = re.compile(r'(?:FROM|JOIN)\s+(\w+)\s+(T\d+)', re.IGNORECASE)
table_alias_matches = table_alias_pattern.findall(s)
alias_to_table = {alias: table.lower() for table, alias in table_alias_matches}

# 2. 提取SELECT中的别名.列名组合
column_pattern = re.compile(r'(T\d+)\.(\w+)', re.IGNORECASE)
column_matches = column_pattern.findall(s)

# 3. 组装数据生成DataFrame
data = []
for alias, col in column_matches:
    data.append({
        'TableName': alias_to_table[alias],
        'Alias': alias,
        'ColumnName': col
    })

df = pd.DataFrame(data)
print(df.to_string(index=False))

代码说明

  • table_alias_pattern:用(?:FROM|JOIN)匹配非捕获的前置关键词,精准提取表名和对应别名,re.IGNORECASE兼容SQL中表名的大小写差异(比如你的SQL里的Table_3)
  • column_pattern:直接匹配所有T数字.列名的结构,快速拆分出别名和列名
  • 最后通过字典完成别名到表名的映射,将数据整理成DataFrame格式

运行代码后会输出符合要求的结果:

TableName Alias ColumnName
  table_1    T1        Col1
  table_1    T1        Col2
  table_2    T2        Col1
  table_2    T2        Col2
  table_3    T3        Col1
  table_3    T3        Col2

内容的提问来源于stack exchange,提问作者pythondumb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:40:42