2017-08-24 60 views
0

我印我的“有效载荷”,我想保存到MySQL数据库的输出时:类型错误:没有足够的论据,格式字符串中使用%s和Python字典

('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] 
+0

你为什么认为散列会在查询中做任何事情? –

+0

我删除了它并发生了相同的错误 –

+0

在查询中有8次出现'%s',但'payload'只有7个元素。 '#'不会注释掉部分查询;如果'c.execute'实际试图将它发送到数据库,它会产生一个语法错误。 – chepner

回答

0

我相信问题是你有多个%s的字符串指标在执行字符串,但只给它一个单一的项目(在这种情况下列表)它不知道它应该分解成多个值。

尝试使用本文中的一些建议来获得您想要的效果。

Using Python String Formatting with Lists

+0

不,“execute()”方法知道如何处理序列。 –

1

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

如果您删除它,您将剩下8 %s,而​​内只有7个项目。

相关问题