2014-10-13 3 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, за исключением Name, который составляет VARCHAR. Это закодировано в Python 3.4 с использованием pymysql.

+0

Я предполагаю, что в коде после 'TeamID) нет новой строки' ', и вы только добавили его здесь для удобочитаемости? – Kos

+0

Да, весь этот оператор выполнения находится на одной строке – Tiberiu

+0

ahhh это простые ошибки, которые вы никогда не замечаете! Cheers – 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.

Смежные вопросы