2017-02-16 68 views
0

所以我目前正在讨论亚马逊API。关于从Python中的对象获取值的困惑

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 

我想将这个结果传递给数据库。

表fields-
(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( “INSERT INTO产品(ASIN)VALUES(%S)” %p.asin)

,但我得到

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

任何其他提示,尝试?我似乎无法弄清楚。

+0

我的回答有帮助吗?如果是,请不要接受,请告诉我 – Wombatz

回答

0

cursor.execute方法,你正在寻找有两个参数:

  1. 查询字符串以占位符(%s)。不要在占位符周围使用引号。
  2. 一个可迭代的的值使用,而不是占位符。

您正在传递一个字符串,这意味着execute会尝试将字符串的每个字符用作值。所以简单地把你的论点放在一个列表中:

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

如果你自己做格式化,你会引入sql注入漏洞。