【问题标题】:ERROR: Not enough arguments for format string错误:格式字符串的参数不足
【发布时间】:2018-09-21 15:11:23
【问题描述】:

我的 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()

当我运行它时,我不断收到 raise errorclass(errorvalue) _mysql_exceptions.ProgrammingError: 格式字符串的参数不足

我有相同数量的列并正确格式化日期。

【问题讨论】:

  • 看起来每行有 4 个项目,但您的格式字符串有 5 个 %s 占位符。

标签: python mysql csv mysql-python


【解决方案1】:

就像@pault 说的,你需要5 件物品(因为ON DUPLICATE KEY UPDATE portfolioValue ='%s' 接近尾声)。

只需将您的投资组合值复制为每行的第 5 项。

【讨论】:

  • 这就是我现在所拥有的: cursor.execute("INSERT INTO portfolioData(Date, portfolioValue, pID, FinancialInstrument) VALUES ('%s', '%s', '%s') ON重复键更新portfolioValue ='%s'", row) 但在插入时它会尝试将'e'从Date插入portfolioValue。
  • 在我删除了portfolioValue _mysql_exceptions.OperationalError 的值周围的''后,我现在得到了这个:(1136,“列数与第1行的值数不匹配”)
【解决方案2】:

使用特殊的 VALUES() 函数更改 SQL 文本以引用将要插入的值(如果插入成功),如下所示

  ON DUPLICATE KEY UPDATE portfolioValue = VALUES(portfolioValue)

那么就不需要传递额外的第二个值副本

【讨论】:

    猜你喜欢
    • 2019-07-23
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2015-11-16
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多