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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:17:30