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

将Excel导入SQLite3执行SQL查询后通过XlsxWriter写回Excel时SQL查询未执行的问题求助

问题根源与修复方案

嘿,我一眼就看出问题啦——你确实执行了SQL查询,但完全没用到查询出来的结果,最后写入Excel的还是原始的全量DataFrame,所以才会觉得“SQL查询未执行”。咱们一步步来修复:

核心问题

你用engine.execute()获取了筛选印度数据的结果,但没有把这个结果转换成DataFrame,也没替换掉原来的全量数据去写入Excel,等于白查了~

修复步骤

  1. 把SQL查询结果转换成DataFrame
    执行查询后,需要用fetchall()获取所有结果,再用results.keys()拿到列名,转换成Pandas DataFrame:

    results = engine.execute("Select * from data where Country = 'India'")
    # 将查询结果转为DataFrame
    filtered_df = pd.DataFrame(results.fetchall(), columns=results.keys())
    
  2. 用筛选后的DataFrame写入Excel
    把原来的df.to_excel(...)改成用filtered_df,这样输出的就是SQL筛选后的印度数据了:

    filtered_df.to_excel(writer_orig, index=False, sheet_name='India')
    

完整修复后的代码

import sqlite3
import pandas as pd
from sqlalchemy import create_engine
import xlsxwriter
import os

file = '/Volumes/XCODE_UI/PYTHON/mypython/vaultlight.xlsx'
output = 'output.xlsx'

engine = create_engine('sqlite://', echo=False)
df = pd.read_excel(file,sheet_name='50000')
df["Total_sales"] = df['Sold'] * df['Price']
df["Margin"] = (df['Price'] - df['Cost']) / df["Price"]
df.to_sql('data', engine, if_exists='replace', index=False)

# 执行查询并转换为DataFrame
results = engine.execute("Select * from data where Country = 'India'")
filtered_df = pd.DataFrame(results.fetchall(), columns=results.keys())

writer_orig = pd.ExcelWriter('myTest.xlsx', engine='xlsxwriter')
# 使用筛选后的DataFrame写入
filtered_df.to_excel(writer_orig, index=False, sheet_name='India')

workbook = writer_orig.book
worksheet = writer_orig.sheets['India']

money_fmt = workbook.add_format({'num_format': '£#,##0.00', 'bold': True})
percent_fmt = workbook.add_format({'num_format': '0.0%', 'bold': True})

worksheet.set_column('D:F', 12, money_fmt)
worksheet.set_column('G:G', 12, percent_fmt)

writer_orig.save()

这样修改后,你的SQL查询就会真正生效,导出的Excel里只会有印度的相关数据啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:22:34