#python #mysql #sql #pandas
Вопрос:
for row in dfp.itertuples(): cursor.execute(''' INSERT INTO athletes(id, season, name) VALUES (?,?,?) ''', ( row.id, row.season, row.name, ) ''' )
mysql.connector.ошибки.Ошибка программирования: Не все параметры были использованы в инструкции SQL.
Я получаю эту ошибку, потому что имя состоит из имени и фамилии, поэтому он рассматривает его как два разных параметра, когда на самом деле это только один параметр. То же самое происходит в другой таблице, когда я использую дату (рассматривая ее как 3 параметра).
Комментарии:
1. Удалите эту последнюю тройную одинарную кавычку:
'''
2. да, на самом деле это не часть кода, я просто поместил его для переполнения стека, чтобы он отображался в формате кода, а затем забыл удалить. Моя вина. Проблема по-прежнему заключается в том, что имя рассматривается как два столбца. Например, если у нас есть имя «Джон Смит» в первой строке, мы рассматриваем их как два параметра
3. Если в таблице 3 столбца и вы передаете 3 параметра, то ошибки быть не должно.
4. покажите таблицу создания и полный код выполнения, сообщение об ошибке не соответствует образцу кода
5. СОЗДАЙТЕ ТАБЛИЦУ спортсменов( id int, сезон int, имя varchar(50), первичный ключ(идентификатор, сезон))
Ответ №1:
В pymysql не используйте ?
в качестве заполнителей параметров. Воспользуйся %s
.
cursor.execute('''INSERT INTO athletes(id, season, name) VALUES (%s,%s,%s)''', (row.id, row.season, row.name,))
Комментарии:
1. Должно ли это быть также %s для даты?
2. Да, для всех типов данных. При использовании в качестве заполнителя параметров для pymysql это не элемент управления форматированием, как для Python
format()
или f-строк, он всегда%s
используется независимо от типа данных.