如何用Python导出SQL查询结果到Excel时添加列标题
问题分析与解决方案
问题根源
- 数据结构破坏:你把查询结果的每一行拆成单个元素合并到
data列表,导致所有数据失去行列区分,写入时全部挤在同一列。 - 缺失列标题:没有从游标中提取表的字段名,导出文件自然没有表头。
- 格式错误:写入时既没加列分隔符(逗号),还误用了
/n(正确换行符是\n),导致行结构混乱。
修正后的代码
import pymysql # 连接数据库 dbconn = pymysql.connect(<db details>) cus = dbconn.cursor() # 执行查询 cus.execute('sql query') # 获取查询结果 res = cus.fetchall() # 提取列标题(字段名) column_names = [desc[0] for desc in cus.description] # 用with语句自动管理文件,避免手动关闭遗漏 with open('main.csv', 'w', encoding='utf-8') as var: # 先写入列标题,逗号分隔列,结尾加换行 var.write(','.join(column_names) + '\n') # 遍历每行结果,转字符串后用逗号分隔列,写入每行 for row in res: var.write(','.join(str(item) for item in row) + '\n') # 关闭数据库连接 cus.close() dbconn.close()
关键说明
- 列标题提取:
cus.description返回每个字段的元组,第一个元素就是字段名,用列表推导式直接提取。 - 保留行列结构:直接遍历
res中的每行元组,不用扁平化数据,确保每行对应CSV的一行。 - 规范CSV格式:用逗号分隔列,
\n分隔行,Excel打开时能正确识别行列结构。 - 编码与安全:指定
utf-8编码避免乱码,with语句自动关闭文件,防止资源泄漏。
内容的提问来源于stack exchange,提问作者MR84
相关产品推荐
相关产品推荐

