为什么INSERT INTO失败,'操作数应该包含1列'?

时间:2014-10-13 04:43:07

标签: python sql pymysql

我知道有关于同一错误的几十个问题,我已经检查了所有这些错误。他们中的大多数都与滥用SELECT声明的人有关,而且我找不到与我类似的问题。

conn = pymysql.connect(host='localhost',
                       port=3306,
                       user='root', 
                       passwd='password',
                       db='nhl')
cur = conn.cursor()

#some code...

player = td.string.strip()
player = player.split(' (')
tID = teamList.index(team)
cur.execute("INSERT INTO players (Name,G,A,P,PlusMinus,PIM,S,H,BKS,GVA,TKA,TeamID) 
             VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
            (player, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, tID))

pymysql.err.InternalError: (1241, 'Operand should contain 1 column(s)')

我真的不确定自己哪里出错了。除INT Name之外,所有数据库列均为VARCHAR。这是使用pymysql在Python 3.4中编码的。

1 个答案:

答案 0 :(得分:2)

player = player.split(' (')

在此行之后,player是字符串列表(而不是字符串),因此cur.execute不允许您将其作为Name列的值进行插值

找到这些错误的一种简单方法是尝试用文字替换值,例如:

cur.execute("INSERT INTO players (Name,G,A,P,PlusMinus,PIM,S,H,BKS,GVA,TKA,TeamID) 
                   VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                          ("playerName", 0,0,0,0,0,0,0,0,0,0, 123))

哪个会起作用,你知道在其他地方寻找错误。请参阅:How to debug by splitting the problem space.