如何高效将SQL脚本列名转为带引号的Python列表?
高效从SQL提取列名生成Python列表的方法
哈哈,这个痛点我太懂了!每次手动给一堆列名加引号、凑成列表格式,简直是浪费时间。给你分享几个我日常用的高效方法,比Excel那套操作快多了:
方法1:Python快速脚本(适合偶尔处理)
如果已经把SQL语句复制到剪贴板了,直接写几行Python代码就能生成可用的列表:
# 把你的SQL语句粘贴到这里 sql = "SELECT a, b, c from MyTable" # 提取SELECT和FROM之间的列部分 columns_section = sql.split("SELECT")[1].split("from")[0].strip() # 分割列名、清理空格、添加引号 formatted_columns = [f"'{col.strip()}'" for col in columns_section.split(",")] # 输出直接可粘贴的Python代码 print(f"MyColumns = [{', '.join(formatted_columns)}]")
运行后直接复制输出结果到你的代码里就行,完美适配简单的SQL语句。
方法2:正则表达式处理复杂SQL(带别名/函数的情况)
如果你的SQL列名带别名(比如user_id AS id)或者包含函数(比如DATE(create_time)),用正则能更精准提取原始列名:
import re # 带复杂列的SQL示例 sql = "SELECT user_id AS id, name, DATE(create_time) AS create_date FROM users" # 匹配SELECT和FROM之间的所有内容 match_result = re.search(r"SELECT\s*(.*?)\s*FROM", sql, re.IGNORECASE | re.DOTALL) if match_result: # 分割每个列项,提取原始列名(去掉别名) column_items = [item.strip().split(" AS ")[0].strip() for item in match_result.group(1).split(",")] # 格式化为带引号的列表项 formatted_columns = [f"'{col}'" for col in column_items] # 输出最终代码 print(f"MyColumns = [{', '.join(formatted_columns)}]")
这个方法能处理绝大多数复杂场景,不用手动去清理别名或函数包裹的内容。
方法3:终端命令行一键处理(适合喜欢终端的同学)
如果你习惯用终端,直接用sed和tr这些工具就能完成,甚至不用写Python:
# 把你的SQL语句替换到echo后面,直接运行 echo "SELECT a, b, c from MyTable" | sed -n 's/SELECT\s*\(.*\)\s*FROM.*/\1/p' | tr ',' '\n' | sed 's/^\s*//;s/\s*$//' | sed "s/^/'/;s/$/',/" | tr -d '\n' | sed 's/,$//' | awk '{print "MyColumns = ["$0"]"}'
这条命令会自动完成:提取列部分→拆分每行一个列名→清理空格→添加引号和逗号→拼接成Python列表格式。
方法4:IDE多光标/正则替换(最快捷的实时操作)
用VS Code、PyCharm这类IDE的话,直接用内置功能就能搞定:
- 多光标法:选中所有列名部分,按住
Alt(Windows/Linux)或Option(Mac)点击每个列名的开头,输入单引号;再跳到每个列名的结尾,输入单引号和逗号,最后删掉最后一个逗号,包上[]就行。 - 正则替换法:复制列名部分到编辑器,打开替换面板:
- 查找框输入:
([^,\s]+)(匹配非逗号非空格的列名) - 替换框输入:
'$1', - 全部替换后,删掉最后一个逗号,再加上
MyColumns = []包裹起来。
- 查找框输入:
这些方法都能帮你省去Excel那套繁琐的操作,选个适合自己的就行!
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

