每当我运行这段代码时,我都会收到一个错误消息:“error%s%e INSERT的目标列数多于表达式数”,fthg下显示一个^。考虑到fthg已经定义好了,你知道这是什么问题吗?非常感谢!在
cur.execute("CREATE TABLE IF NOT EXISTS soccerleague.games (gameId SERIAL PRIMARY KEY, homeTeamId INTEGER, FOREIGN KEY (homeTeamId) REFERENCES soccerleague.teams(id),awayTeamId INTEGER, FOREIGN KEY (awayTeamId) REFERENCES soccerleague.teams(id), fthg INTEGER, athg INTEGER, ftr VARCHAR, refereeId INTEGER, FOREIGN KEY (refereeId) REFERENCES soccerleague.referees(id), HY INTEGER, AY INTEGER)")
data3 = (teamsDict[homeTeam], teamsDict[awayTeam], fthg, athg, ftr, refereesDict[refereeName], hy, ay)
query3 = "INSERT INTO soccerleague.games (homeTeamId, awayTeamId, fthg, athg, ftr, refereeId, hy, ay) VALUES"
query3 += "('" + str(data3) + "', '" + x + "'),"
query3 = query3[:-1] + ";"
问题不在于创建表,而在于设置要插入的数据时。在
第}的内容,其和为2个参数。insert语句
query3 += "('" + str(data3) + "', '" + x + "'),"
行指示先插入data3
的内容,然后插入{query3 = "INSERT INTO soccerleague.games (homeTeamId, awayTeamId, fthg, athg, ftr, refereeId, hy, ay) VALUES"
引用了8个参数。要解决这个问题,要么提供8个值(有些值可能为null),要么将insert语句缩减到只包含2个firsts字段。在即使将
data3
设置为包含所需的所有值,insert语句仍将其作为单引号字符串写入,该字符串只映射到第一个字段。在相关问题 更多 >
编程相关推荐