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

如何修复Python SQLite查询赛事与轮次ID时的字符串拼接类型错误

问题修复方案

错误原因

  • 你的getIDCampionato函数返回值是列表(代码中用列表推导式[row[0] for row in cursor]生成),哪怕查询结果只有1条,返回的也是类似[435]的列表结构。你把这个列表直接作为参数传给getIDGiornata的id_campionato形参,在拼接SQL时试图将列表和字符串相加,自然触发TypeError: can only concatenate str (not "list") to str报错。
  • 你当前直接用+拼接SQL语句的写法存在SQL注入风险,且如果赛事名包含引号会直接触发SQL语法错误,应该用SQLite官方推荐的参数化查询写法。
  • getIDGiornata函数当前查询的是Numero_Giornata字段(也就是轮次数字),但你实际需要存入结果表的是轮次的主键ID_Giornata,逻辑上存在错误。

修改后的代码

def getIDCampionato(nome_campionato):
    # 使用参数化查询,? 作为占位符,参数以元组形式传入
    cursor.execute('SELECT ID_Campionato FROM ARCHIVIO_Campionati WHERE Nome_Campionato = ?;', (nome_campionato,))
    result = cursor.fetchone() # 只取第一条匹配结果,返回元组,无匹配则为None
    return result[0] if result else None

def getIDGiornata(id_campionato, giornata):
    # 注意这里查询字段改为ID_Giornata,符合存入结果表的需求,轮次字段为整数类型,提前做类型转换
    cursor.execute('SELECT ID_Giornata FROM ARCHIVIO_Giornate WHERE Relaz_Campionato = ? AND Numero_Giornata = ?;', (id_campionato, int(giornata)))
    result = cursor.fetchone()
    return result[0] if result else None

补充说明

可以在add_employee函数的空值校验逻辑中,增加对id_camp和id_giornata是否为None的判断,避免查询不到对应ID时存入无效值,比如在校验条件中补充or id_camp is None or id_giornata is None即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:15:03