Код вставки mysql выдал следующую ошибку: Не все параметры были использованы в операторе SQL

0

Ниже приведен мой код для загрузки данных в таблице mysql (7 столбцов информации):

#!/usr/bin/env python
import mysql.connector, csv, sys

csv.field_size_limit(sys.maxsize)

cnx = mysql.connector.connect(user='testuser', password= 'testuser', database='database')

cursor = cnx.cursor()

table=csv.reader(file("logs.txt"), delimiter='\t')

for row in table:

      cursor.execute("INSERT INTO first_table (column1, column2, column3, column4 , column5, column6, column7) VALUES (%s, %s, %s, %s, %s, %s, %s)", row)

cnx.commit()

cnx.close()

Ниже приведено усеченное содержимое файла logs.txt из 7 столбцов (с разделителями табуляции), а последний столбец (mouse_phene_id) может быть пустым или иметь один или несколько элементов, разделенных пробелом:

human_gene_symbol       entrez_id       homolog_id      hgnc_assoc      mouse_gene_symbol       mouse_mgi_id    mouse_phene_id
A1BG      1     11167   yes     A1bg      MGI:2152878           
A1CF      29974 16363   yes     A1cf      MGI:1917115     MP:0005387 MP:0005386 MP:0005388 MP:0005385 MP:0002873 MP:0010768 MP:0005369 MP:0005376 MP:0005384 MP:0005378 
A2M       2     37248   yes     A2m       MGI:2449119           
A3GALT2   127550        16326   yes     A3galt2   MGI:2685279           
A4GALT    53947 9690    yes     A4galt    MGI:3512453     MP:0005386 MP:0010768 MP:0005376      
A4GNT     51146 87446   yes     A4gnt     MGI:2143261     MP:0005384 MP:0002006 MP:0005385 MP:0005381 MP:0005387        
AAAS      8086  9232    yes     Aaas      MGI:2443767     MP:0005389 MP:0005386 MP:0005378      
AACS      65985 11322   yes     Aacs      MGI:1926144           
AADAC     13    37436   yes     Aadac     MGI:1915008  

Изображение 174551

Я получаю следующую ошибку, и поскольку это обычная ошибка, я пробовал все, что было опубликовано в stackoverflow, связанном с этой ошибкой, и все еще нефиксировано и застряло:

Traceback (most recent call last):
  File "insert_mysql.py", line 23, in <module>
    cursor.execute("INSERT INTO first_table (column1, column2, column3, column4 , column5, column6, column7) VALUES (%s, %s, %s, %s, %s, %s, %s)", row)
  File "/usr/local/lib/python2.7/dist-packages/mysql/connector/cursor.py", line 551, in execute "Not all parameters were used in the SQL statement")
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

first_table:

Изображение 174551

Большое спасибо за любую помощь, советы. Заранее спасибо.

Теги:
mysql-python

1 ответ

1

Ошибка, которую вы видите, скорее всего, вызвана рядом в файле logs.txt который не имеет того же количества элементов (7), которое ожидает ваш оператор, подготовленный вставки. Ошибка

Не все параметры были использованы в инструкции SQL

означает, что у вас был один или несколько позиционных параметров, которые не могли быть присвоены значениям и, следовательно, не использовались.

Я могу сделать два предложения о том, где в файле может возникнуть проблема. Во-первых, файл журнала может содержать одну или несколько строк заголовка, которые могут не иметь одинакового количества столбцов или типов значений, ожидаемых сценарием. Вы можете пропустить любое количество начальных строк через это:

skip_first_line = next(table)
skip_second_line = next(table)
# etc.

Другими словами, просто вызовите next() чтобы использовать любое количество начальных строк в файле журнала, которые не содержат фактических данных, которые вы хотите вставить.

Если нет, то, возможно, проблематичная строка находится где-то посередине файла. Вы можете попробовать распечатать каждую строку в своем скрипте, чтобы увидеть, где она умирает:

for row in table:
    cursor.execute("INSERT INTO first_table (column1, column2, column3, column4 , column5, column6, column7) VALUES (%s, %s, %s, %s, %s, %s, %s)", row)
    print row
  • 0
    Большое спасибо за ваш отзыв. Я сделал именно так, как вы предложили, включил вызов next () и print, протестировал независимо и вместе, все еще вывел ту же ошибку «не все параметры были использованы». Очень застрял.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню