【问题标题】:TypeError: not enough arguments for format string when using %s and a python dictionaryTypeError:使用 %s 和 python 字典时,格式字符串的参数不足
【发布时间】:2018-02-02 16:44:42
【问题描述】:

我已经打印了我想要保存到 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]

【问题讨论】:

  • 为什么你认为哈希会在查询中做任何事情?
  • 我删了还是一样的错误
  • 您的查询中有 8 个 %s,但 payload 只有 7 个元素。 # 不会注释掉部分查询;如果c.execute 实际上试图将其发送到数据库,它只会产生语法错误。

标签: python mysql-python


【解决方案1】:

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

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

Using Python String Formatting with Lists

【讨论】:

  • 不,execute() 方法知道如何处理序列。
【解决方案2】:

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

如果你删除它,你会留下 8 个%s,而payload 中只有 7 个项目。

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 2017-01-19
    • 2012-06-24
    • 2018-06-07
    • 1970-01-01
    • 2020-10-17
    • 2012-06-11
    • 2019-01-17
    相关资源
    最近更新 更多