2014-10-13 108 views
1

我知道有幾十個關於同一個錯誤的問題,我已經檢查了所有問題。他們中的大部分都與某人濫用SELECT聲明有關,並且我找不到與我的問題類似的任何問題。爲什麼INSERT INTO失敗,'操作數應該包含1列'?

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,但NameVARCHAR。這是使用pymysql在Python 3.4中編碼的。

+0

我假設在你的代碼中沒有換行符,並且你只是在這裏添加它以提高可讀性? – Kos

+0

是的,整個執行語句在一行 – Tiberiu

+0

ahhh這是你永遠不會注意到的簡單錯誤!乾杯 – Tiberiu

回答

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.