Python执行SQL查询结果可打印但无法写入CSV文件问题求助
问题根源
你的核心问题是curr_tab变量在循环中被反复覆盖,最终写入文件时用的是最后一次循环的查询结果:
- 你遍历的arr最后一个值是13,对应你打印的最后一行输出就是空列表
[] - 循环结束后
curr_tab已经被覆盖为最后一次的空值,写文件时自然没有内容
修复方案
首先要把每次循环的非空查询结果都存下来,不要每次覆盖:
import csv def get_avg(self,f0, f00, f1, f2): arr = [1,2,3,4,5,6,7,8,9,10,11,12,13] # 定义列表存储所有有效查询结果 all_result = [] for n in arr: # 改用参数化查询传递变量n,避免SQL注入风险 curr_tab = c.execute("SELECT {}, {}, COUNT({}), AVG({}), AVG({}) FROM {} WHERE {} = ? GROUP BY {} ORDER BY COUNT({}) DESC".format(f0, f00, f00, f1, f2, self.table_name, f0, f00, f00), (n,)).fetchall() print(curr_tab) # 非空结果追加到总列表 if curr_tab: all_result.extend(curr_tab) # 统一写入所有结果 with open("cvc.csv", "w", newline="", encoding="utf-8") as this_file: writer = csv.writer(this_file) writer.writerows(all_result)
额外优化说明
- 打开csv文件时添加
newline=""参数,可避免Windows系统下写入出现多余空行 - 指定编码为utf-8,避免特殊字符写入乱码
- 不需要每次写行都新建csv.writer对象,创建一次复用即可,运行效率更高
内容的提问来源于stack exchange,提问作者Farida Yasser
相关产品推荐
相关产品推荐

