Мой файл 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: недостаточно аргументов для строки формата
У меня одинаковое количество столбцов и правильное форматирование даты.
Измените текст SQL, чтобы ссылаться на значение, которое было бы вставлено (если вставка прошла успешно), используя специальную функцию VALUES()
, например
ON DUPLICATE KEY UPDATE portfolioValue = VALUES(portfolioValue)
то нет необходимости передавать дополнительную вторую копию значения
как и @pault, вам нужно 5 предметов (из-за того, что ON DUPLICATE KEY UPDATE portfolioValue ='%s'
).
Просто сделайте копию своего портфолиоValue как 5-й элемент для каждой строки.
%s
заполнителей.