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

Tkinter同一Combobox如何同时保存选中名称及对应ID到数据库

核心问题

你调用insert方法时,最后一个id_campionato参数传入的是联赛名称(campionato.get()),没有调用已编写的id_campionati查询函数获取对应ID,导致存储值错误。


修改步骤

  1. 调整id_campionati函数的返回逻辑,避免无匹配结果时报索引错误:
def id_campionati():
    campionato_name = combo_Campionato.get()
    cursor.execute('SELECT ID_Campionato FROM ARCHIVIO_Campionati WHERE Nome_Campionato=?',(campionato_name,))
    result = [row[0] for row in cursor]
    # 有匹配结果返回第一个ID,无结果返回None
    return result[0] if result else None
  1. 修改add_employee函数中调用db.insert的参数,将最后一位替换为id_campionati()的返回值:
def add_employee():
    if combo_Campionato.get() == "" or combo_Giornate.get() == "" or  de.get() == "" or combo_Orario_Ora.get() == "" or combo_Orario_Minuti.get() == "" or combo_NomeSquadra_Casa.get() == "" or combo_NomeSquadra_Fuori.get() == "" or combo_Risultato_Sq_A.get() == "" or combo_Risultato_Sq_B.get() == "":
        messagebox.showerror("Erorr in Input", "Please Fill All the Details")
        return
    # 仅修改最后一个参数即可
    db.insert(
        campionato.get(), 
        giornata.get(), 
        de.get(),
        combo_Orario_Ora.get(), 
        combo_Orario_Minuti.get(), 
        combo_NomeSquadra_Casa.get(), 
        combo_NomeSquadra_Fuori.get(), 
        combo_Risultato_Sq_A.get(), 
        combo_Risultato_Sq_B.get(), 
        id_campionati()
    )
    messagebox.showinfo("Success", "Record Inserted")
    clearAll()
    dispalyAll()

可选优化方案

如果想要减少数据库查询次数,可以在初始化Combobox时就生成联赛名称与ID的映射字典,后续插入数据时直接从字典取ID即可:

# 全局存储名称-ID映射
campionato_id_map = {}

def combo_campionati():
    # 同时查询名称和ID
    cursor.execute('SELECT Nome_Campionato, ID_Campionato FROM ARCHIVIO_CAMPIONATI')
    name_list = []
    for name, cid in cursor:
        name_list.append(name)
        campionato_id_map[name] = cid
    return name_list

插入数据时直接取对应ID即可,无需每次查询数据库:

db.insert(
    # 其他参数保持不变
    campionato_id_map.get(campionato.get())
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:27:05