将Excel导入SQLite3执行SQL查询后通过XlsxWriter写回Excel时SQL查询未执行的问题求助
问题根源与修复方案
嘿,我一眼就看出问题啦——你确实执行了SQL查询,但完全没用到查询出来的结果,最后写入Excel的还是原始的全量DataFrame,所以才会觉得“SQL查询未执行”。咱们一步步来修复:
核心问题
你用engine.execute()获取了筛选印度数据的结果,但没有把这个结果转换成DataFrame,也没替换掉原来的全量数据去写入Excel,等于白查了~
修复步骤
把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())用筛选后的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
相关产品推荐
相关产品推荐

