TypeError:使用%s和python字典时,格式字符串的参数不足

TypeError:使用%s和python字典时,格式字符串的参数不足,python,mysql-python,Python,Mysql Python,我已经打印了要保存到MySQL数据库的“有效负载”输出: ('B01MTOV8IP', '40462', '23.95', 'n/a', 'Usually ships in 24 hours', 'https://www.amazon.com/reviews/iframe?akid=AKIAIDCPAFSAQICDTFNQ&alinkCode=xm2&asin=B01MTOV8IP&atag=reakenture-20&exp=2017-08-25T17%3A2

我已经打印了要保存到MySQL数据库的“有效负载”输出:

('B01MTOV8IP', '40462', '23.95', 'n/a', 'Usually ships in 24 hours', 
'https://www.amazon.com/reviews/iframe?akid=AKIAIDCPAFSAQICDTFNQ&alinkCode=xm2&asin=B01MTOV8IP&atag=reakenture-20&exp=2017-08-25T17%3A27%3A37Z&v=2&sig=3zbBXVo4cQAJueFeVeo%252F%252FejvaUOmvuwAtfB4EfMyDiU%253D', 'CHG-GSTWL')
在我将它传递给连接之前,我格式化它的方式似乎有问题

try:
    selling_price = product.price_and_currency
    selling_price_v = selling_price[0]#type
    print selling_price_v
except Exception as e:
    selling_price = "n/a"

conn = MySQLdb.connect(host="clabadmin.cfcudy1fdz8o.us-east-1.rds.amazonaws.com", user="", passwd="", db="")
payload =[
asin,
bsr,
str(selling_price_v),
str(listing_price_v),
# availability_type,
availability,
reviews,
sku]
print payload 
# conn = sqlite3.connect('skubsr.db')
c = conn.cursor()
c.execute("""UPDATE webservice_bsr 
SET 
AISN = %s,
Best_Sellers_Rank = %s,
selling_price =  %s,
price = %s,
# availability_type = %s,
availability = %s,
reviews = %s
WHERE ItemSKU = %s""", payload)
conn.commit()
我得到以下错误:

Traceback (most recent call last):
  File "/home/trackstarz/clabReportScraper/bsrimport.py", line 907, in <module>
    WHERE ItemSKU = %s""", payload)
  File "/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 187, in execute
    query = query % tuple([db.literal(item) for item in args])
TypeError: not enough arguments for format string
[Finished in 3.1s with exit code 1]
回溯(最近一次呼叫最后一次):
文件“/home/trackstarz/clabReportScraper/bsrimport.py”,第907行,在
其中ItemSKU=%s“”,有效负载)
文件“/usr/local/lib/python2.7/dist packages/MySQLdb/cursors.py”,执行中第187行
query=query%元组([db.literal(item)用于args中的项])
TypeError:格式字符串的参数不足
[在3.1s中完成,退出代码为1]

我认为问题在于,您的执行字符串中有多个%s字符串指示符,但只给它一个项目(在本例中是一个列表),它不知道应该将其分解为多个值

试着使用本文中的一些建议来达到你想要的效果

#
仅在Python代码中使用时用于指示注释。在查询中,注释位于查询字符串中,因此不作为注释标识符进行分析,而是作为查询的一部分进行分析


如果你删除它,你只剩下8个
%s
,在
有效载荷中只有7个项目

为什么你认为哈希会在查询中起作用?我删除了它,同样的错误你在查询中出现了8次
%s
,但是
有效载荷只有7个元素。
不会注释掉查询的一部分;我如果
c.execute
实际试图将其发送到数据库,t只会产生语法错误。不,
execute()
方法知道如何处理序列。