如何在Python中将SQLite数据无括号插入Excel指定列
解决Python将SQL查询结果逐行写入Excel的问题
嘿,作为Python新手遇到这个问题太正常了,我来帮你搞定它!
首先咱们先拆解下当前代码的问题:
cur.fetchall()返回的是元组组成的列表,比如你的查询结果大概率是这种格式:[('红色',), ('蓝色',), ('绿色',), ...],直接转成字符串自然会带着括号和引号- 你把整个结果列表都塞进了B14这一个单元格,当然没法实现逐行填充的需求
接下来是具体的解决方法,我会给你完整的修改后代码,每一步都讲清楚:
步骤1:提取查询结果里的纯值
因为每个元组里只有colors列的一个值,所以我们需要把每个元组的第一个元素单独取出来,得到一个干净的颜色列表:
colors = [item[0] for item in cur.fetchall()]
步骤2:循环将值写入对应单元格
从B14到B33一共是20个单元格(33-14+1=20),刚好对应你的查询结果数量(假设store表的colors列有20条数据)。我们可以用enumerate遍历颜色列表,同时计算对应的行号:
# i是索引,从0开始;color是每个颜色值 for i, color in enumerate(colors): # 行号从14开始,每次循环加1 row_num = 14 + i # 写入B列对应的单元格 ws[f"B{row_num}"].value = color
完整修改后的代码
from openpyxl import load_workbook import sqlite3 # 加载Excel工作簿 wb = load_workbook('example.xlsx') ws = wb.active # 连接SQLite数据库并执行查询 con = sqlite3.connect(database=r'database.db') cur = con.cursor() cur.execute("Select colors from store") # 提取纯颜色值,去掉元组的括号 colors = [item[0] for item in cur.fetchall()] # 逐行写入Excel的B14到B33单元格 for i, color in enumerate(colors): row_num = 14 + i ws[f"B{row_num}"].value = color # 重点!一定要保存工作簿,不然所有修改都不会生效 wb.save('example.xlsx') # 关闭数据库连接,养成好习惯 con.close()
补充小提醒
- 千万别忘调用
wb.save(),这是很多新手容易忽略的细节,不保存的话你的修改根本不会写入到Excel文件里 - 如果你的查询结果数量超过20条,代码会自动写到B33之后的单元格;如果不足20条,后面的单元格会保持原样,你可以根据需求添加判断逻辑调整
- 如果你用的是其他Excel操作库(比如
pandas),核心思路也是一样的:先把数据处理成纯值列表,再循环写入对应位置
内容的提问来源于stack exchange,提问作者bāsil
相关产品推荐
相关产品推荐

