对于从Python

时间:2017-02-16 00:31:39

标签: python mysql python-3.x api

所以我目前正在搞乱亚马逊API。

amazon = AmazonAPI('mykey', 'mykey', 'bmykey')

products = amazon.search(SearchIndex='Beauty',
                         ResponseGroup='ItemAttributes,OfferFull,OfferListings,Offers,SalesRank,OfferSummary',
                         Sort='salesrank', BrowseNode='3777891')  

我试图将结果的某些部分保存到数据库中

返回

类型
<class 'amazon.api.AmazonSearch'>

当我运行这个

for p in products:
     print(p.asin) 

结果看起来像这样

B004B8AZH0
B00XTAFYKY
B0014P8L9W
B00QZ67ODE
B00ARF42H0
B011YRJ31O  

我试图将此结果传递给数据库。

表格字段 -
(INT(11))id
(VARCHAR(255))ASIN

由于某种原因,我似乎无法将结果传递到数据库中。继承人我试过的事情

cur = db.cursor()

for p in products:
    print(p.asin)
    add = """INSERT INTO products(ASIN) VALUES(%s)"""
    cur.execute(add, p.asin)
    db.commit()

cur.close()
db.close()  

但返回

query = query % args
TypeError: not all arguments converted during string formatting  

尝试运行str(p.asin),但我得到了同样的错误。

试过这个

cur.execute(&#34; INSERT INTO products(ASIN)VALUES(%s)&#34;%p.asin)

但我得到

_mysql_exceptions.OperationalError: (1054, "Unknown column 'B004B8AZH0' in 'field list'")

还有其他尝试吗?我似乎无法弄明白。

1 个答案:

答案 0 :(得分:0)

您正在寻找的cursor.execute方法有两个参数:

  1. 带占位符的查询字符串(%s)。不要在占位符周围使用引号。
  2. 要使用的可迭代值而不是占位符。
  3. 您传递的字符串意味着execute尝试将字符串的每个字符用作值。所以只需将你的论点放在一个列表中:

    cur.execute(your_query, [p.asin])
    

    如果您自己进行格式化,则会引入sql注入漏洞。