首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:格式字符串的参数不够

错误:格式字符串的参数不够
EN

Stack Overflow用户
提问于 2018-04-11 16:20:19
回答 2查看 431关注 0票数 0

我的CSV文件包含这样的数据:

代码语言:javascript
复制
Date,portfolioValue,pID,FinancialInstrument
2018-03-27,4937.395022140785,1,Oil
2018-03-28,4937.395022140785,1,Oil

我的插入执行代码如下:

代码语言:javascript
复制
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()

当我运行它时,我总是得到引发错误类(错误值) _mysql_exceptions.ProgrammingError:格式字符串的参数不够

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-11 18:22:48

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

代码语言:javascript
复制
  ON DUPLICATE KEY UPDATE portfolioValue = VALUES(portfolioValue)

那么就不需要再传递值的第二个副本了

票数 0
EN

Stack Overflow用户

发布于 2018-04-11 16:31:35

就像@pault说的那样,您需要5项(因为ON DUPLICATE KEY UPDATE portfolioValue ='%s'即将结束)。

只需为每一行创建一个portfolioValue的副本,作为第5项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49780054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档