我创建了这两个函数,在curson.execute中添加了各种+:
def getIDCampionato(nome_campionato):
cursor.execute('SELECT ID_Campionato FROM ARCHIVIO_Campionati WHERE Nome_Campionato = "' + nome_campionato + '";')
result=[row[0] for row in cursor]
return result
def getIDGiornata(id_campionato, giornata):
cursor.execute('SELECT Numero_Giornata FROM ARCHIVIO_Giornate WHERE Relaz_Campionato = "' + id_campionato + '" AND Numero_Giornata = "' + giornata + '";')
result=[row[0] for row in cursor]
return result
但我得到了一个错误:
python TypeError: can only concatenate str (not "list") to str
错误:错误就在我写“+nome_campionato+”;”的地方以及“+id_campionato+”和numerio_Giornata=“”+Giornata+”;“。以前,当只有Select、From和Where(当还没有各种+)时,我没有发现错误,因此我相信sql是正确的
我该怎么办?这是不需要的,因为上面有错误,但是为了更好地完成问题,我添加了这段代码。这两个函数用于调用从sqlite数据库中提取的与每个对应giornata相关的锦标赛id(campionato)和giornata(回合)id(即每周一轮,内部有不同的比赛)。 为什么我要回忆这两个ID?因为有两个组合框:campionato(锦标赛)和giornata(每个campionato/锦标赛38个)。这两个组合框是组合在一起的。我选择campionato(锦标赛),然后选择38轮中的一轮(giornata)。在每一轮中,空的,我可以插入不同的记录(下表“ARCHIVIO_Risultati”)。每一轮比赛将有38个不同的回合。因此,出于Sql标识的原因,我创建了上述两个函数。随后在此处调用它们,在“添加/添加”按钮的函数中调用它们,以在数据库中添加记录(通过手动编译textobox和combobx)
def add_employee():
id_camp = getIDCampionato(combo_Campionato.get())
id_giornata = getIDGiornata(id_camp, combo_Giornate.get())
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("Error")
return
db.insert(id_camp, id_giornata, 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())
messagebox.showinfo("Record ok")
clearAll()
dispalyAll()
例如,我想通过两个campionato和giornata组合框获得:
Campionato: Serie A | Giornata 1 >>>>>> I insert various matches and info
Campionato: Serie A | Giornata 2 >>>>>> I insert various matches and info
Campionato: Serie A | Giornata ... >>>>>> I insert various matches and info
Campionato: Serie A | Giornata 38 >>>>>> I insert various matches and info
Campionato: Serie B | Giornata 1 >>>>>> I insert various matches and info
Campionato: Serie B | Giornata 2 >>>>>> I insert various matches and info
Campionato: Serie B | Giornata ... >>>>>> I insert various matches and info
Campionato: Serie B | Giornata 38 >>>>>> I insert various matches and info
为了更好地理解,以下是数据库表:
#Tournaments (Campionati)
CREATE TABLE "ARCHIVIO_Campionati" (
"ID_Campionato" INTEGER, (example 435)
"Nome_Campionato" TEXT, (example Serie A)
PRIMARY KEY("ID_Campionato" AUTOINCREMENT)
);
#Rounds (Giornate)
CREATE TABLE "ARCHIVIO_Giornate" (
"ID_Giornata" INTEGER,
"Relaz_Campionato" INTEGER, (example 435)
"Numero_Giornata" INTEGER, (1 to 38)
FOREIGN KEY("Relaz_Campionato") REFERENCES "ARCHIVIO_Campionati"("ID_Campionato"),
PRIMARY KEY("ID_Giornata" AUTOINCREMENT)
);
#Data to be saved in each of the 38 different rounds (Giornate). Each Tournaments consists of 38 rounds
CREATE TABLE "ARCHIVIO_Risultati" (
"ID" INTEGER,
"campionato" INTEGER,
"giornate" INTEGER,
"calendario" INTEGER,
"ore" NUMERIC,
"minuti" NUMERIC,
"squadra_casa" INTEGER,
"squadra_fuori" INTEGER,
"ris_sq_casa" NUMERIC,
"ris_sq_fuori" NUMERIC,
PRIMARY KEY("ID" AUTOINCREMENT)
);
您能告诉我如何更正问题开头的两个函数getIDCampionato和getIDGiornata吗?谢谢
根据显示的第一个错误,确保未向这些函数传递列表:
[nome_campionato单个字符串]*不属于代码的一部分
[id_campionato&;giornata单个整数值]*不属于代码的一部分
尝试上面更新的函数
它不打印的原因是我们直接确认了数据类型,所以这似乎是正确的,问题是其他的! 为了得到一个想法,我添加了更多的打印语句
我按照error resolution的建议添加了逗号
try分别调用函数getIDGiornata(id_campionato,giornata)查看它是否有效,如果无效,添加try-except块作为前一个函数并发布图像
相关问题 更多 >
编程相关推荐