ОШИБКА: недостаточно аргументов для строки формата

0

Мой файл CSV содержит следующие данные:

Date,portfolioValue,pID,FinancialInstrument
2018-03-27,4937.395022140785,1,Oil
2018-03-28,4937.395022140785,1,Oil

Мой код выполнения вставки выглядит следующим образом:

file = open(portfolio_file,'r')
    csv_data = csv.reader(file, delimiter =',')
    for row in df_header:
        print(row)
        #stmt = ("INSERT INTO PredictionData (Date, Open, Settle, High, Low, HorizonType, InstrumentName, PredictorType) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) ON DUPLICATE KEY UPDATE Open=%s, Settle=%s, High=%s, Low=%s")
        cursor.execute("INSERT INTO portfolioData(Date, portfolioValue, pID, FinancialInstrument) VALUES (DATE_FORMAT('%s','%%Y-%%m-%%d'), '%s', '%s', '%s') ON DUPLICATE KEY UPDATE portfolioValue ='%s'", row)
        cnx.commit()

Когда я запускаю это, я постоянно получаю повышение errorclass (errorvalue) _mysql_exceptions.ProgrammingError: недостаточно аргументов для строки формата

У меня одинаковое количество столбцов и правильное форматирование даты.

  • 3
    Похоже, в каждой строке 4 элемента, а в строке формата 5 %s заполнителей.
Теги:
csv
mysql-python

2 ответа

0
Лучший ответ

Измените текст SQL, чтобы ссылаться на значение, которое было бы вставлено (если вставка прошла успешно), используя специальную функцию VALUES(), например

  ON DUPLICATE KEY UPDATE portfolioValue = VALUES(portfolioValue)

то нет необходимости передавать дополнительную вторую копию значения

0

как и @pault, вам нужно 5 предметов (из-за того, что ON DUPLICATE KEY UPDATE portfolioValue ='%s').

Просто сделайте копию своего портфолиоValue как 5-й элемент для каждой строки.

  • 0
    Это то, что у меня есть сейчас: cursor.execute ("INSERT INTO portfolioData (Date, portfolioValue, pID, FinancialInstrument) VALUES ('% s', '% s', '% s') ON DUPLICATE KEY UPDATE portfolioValue = '% s '", row), но при вставке он пытается вставить' e 'из Date в portfolioValue.
  • 0
    Я получаю это сейчас, после того как я удалил '' вокруг значения для portfolioValue _mysql_exceptions.OperationalError: (1136, "Число столбцов не соответствует количеству значений в строке 1")

Ещё вопросы

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