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

如何将Python循环SQL查询的所有结果保存为单个表格文件

循环SQL查询结果汇总写入单文件实现方法

问题原因

现有代码存在两处核心逻辑错误,导致最终输出仅保留最后一次查询结果:

  • pd.concat() 为非原地操作,执行后会返回拼接完成的新DataFrame,不会修改传入的原始对象。原代码仅调用concat未接收返回值,每次查询得到的temp_df实际没有存入初始化的结果集df中,df始终为空。
  • 若将to_csv放在循环内,pandas默认写入模式为覆盖写(mode='w'),每次执行都会清空文件原有内容写入当前结果,循环结束后自然只剩最后一次的查询数据。

可直接复用的修复方案

方案1:内存拼接后一次性导出(适合总数据量较小的场景)

逻辑最简单,仅需修正concat的赋值逻辑即可,修改后的核心代码如下:

# 初始化固定列名的空结果集
df = pd.DataFrame([], columns=['a','b','c','d','e'])
for row in range(3, sheet.max_row + 1): 
    a0, b0, r = sheet.cell(row,1).value, sheet.cell(row,2).value, 0.001
    query = """
    SELECT a,b,c,d,e FROM smthng
      WHERE q3c_radial_query(a,b,{:f},{:f},{:f}) LIMIT 1
    """.format(a0,b0,r)
    response = qc.query(sql=query, format='csv')
    temp_df = convert(response, 'pandas')
    # 关键:接收concat返回的拼接结果,重置索引避免索引重复
    df = pd.concat([df, temp_df], ignore_index=True)

# 所有循环执行完成后一次性导出文件
df.to_csv('trial.csv', index=False)

参数说明:

  • ignore_index=True:拼接后重新生成连续行索引,避免多段数据索引重复
  • index=False:导出时不写入pandas自动生成的行索引列,保持输出文件整洁

方案2:循环追加写入(适合总数据量较大的场景)

如果查询结果总数据量较高,全量加载到内存容易造成资源占用过高,可以改为边查边写的模式:第一次写入时创建文件、写入列名和第一份数据,后续循环仅追加数据内容、不重复写列名。

# 标记是否为首次写入
is_first_write = True
for row in range(3, sheet.max_row + 1): 
    a0, b0, r = sheet.cell(row,1).value, sheet.cell(row,2).value, 0.001
    query = """
    SELECT a,b,c,d,e FROM smthng
      WHERE q3c_radial_query(a,b,{:f},{:f},{:f}) LIMIT 1
    """.format(a0,b0,r)
    response = qc.query(sql=query, format='csv')
    temp_df = convert(response, 'pandas')
    
    if is_first_write:
        # 首次写入:覆盖模式,写入列名
        temp_df.to_csv('trial.csv', mode='w', index=False, header=True)
        is_first_write = False
    else:
        # 后续写入:追加模式,不写列名
        temp_df.to_csv('trial.csv', mode='a', index=False, header=False)

核心写入参数说明:

  • mode='w':覆盖写入模式,首次执行时清空目标文件原有内容
  • mode='a':追加写入模式,后续执行时将新内容写到文件末尾,不修改已有内容
  • header=False:追加写入时跳过列名行,保证最终文件仅在开头存在一行统一列名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:03:19