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

Python PySimpleGui中Combobox取sqlite表值附带元组特殊字符问题

问题原因

cursor.fetchall() 返回的查询结果是元组列表,即使只查询product_name单个字段,每条记录也会以('Lemon',)、('Orange',)这种单元素元组的格式返回。你直接把这个元组列表传给Combobox作为下拉选项,选中后拿到的值自然是带括号、单引号、尾逗号的元组字符串,不是纯产品名称。

修复方案

1. 提前提取纯产品名称字符串

修改find_product()函数,从查询返回的元组里提取出纯字符串值,再传给Combobox:

def find_product():
    conn = sqlite3.connect('controller.db')
    cursor = conn.cursor()
    cursor.execute("SELECT product_name FROM products ORDER BY product_name ")
    # 提取每个元组的第一个元素,组成纯字符串列表
    data = [row[0] for row in cursor.fetchall()]
    cursor.close()
    conn.close()
    print(data)
    return data

修改后Combobox的所有选项都是纯产品名字符串,选中后values['-PRODUCT_NAME-']直接就是干净的名称值,不需要额外做字符串裁剪。

2. 修正数据插入逻辑

原代码里create_files()和update()函数给数值字段加了多余括号,也没做类型转换,把两个函数里的data_new赋值部分替换为:

data_new = (values['-PRODUCT_NAME-'], float(values['-QUANTITY-']), float(values['-TOTAL_VALUE-']))

不需要再给values['-PRODUCT_NAME-']套str()转换,修改后拿到的本身就是字符串类型。

3. 修复原代码隐藏bug

原update()函数里执行完cursor.execute()和conn.commit()就马上关闭了游标,之后再读取cursor.rowcount会触发游标已关闭的错误,把cursor.close()挪到所有数据库操作完成之后再执行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:39:15