python - 对从Python中的对象获取值感到困惑

标签 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(“插入产品 (ASIN) 值 (%s)” % p.asin)

但我明白了

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

还有其他可以尝试的技巧吗?我似乎无法弄清楚。

最佳答案

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

  1. 带有占位符的查询字符串 (%s)。不要在占位符两边使用引号。
  2. 可迭代的值,用于代替占位符。

您传递了一个字符串,这意味着 execute 尝试使用该字符串的每个字符作为值。因此,只需将您的论点放入列表中即可:

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

如果您自己进行格式化,则会引入 SQL 注入(inject)漏洞。

关于python - 对从Python中的对象获取值感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42262691/

相关文章:

MySql 查询将包含定界符的列转换为行

python - 在Python中,我可以让导入我的模块的用户可以使用另一个模块的函数吗?

python - 排除基于另一个没有外键的模型的值的模型

python - 为什么中断比引发异常更快?

python - 如何为每列使用不同的默认值初始化 NumPy 结构化数组?

php - 我的查询是否删除了整个表?

python - 将文本换行与更改文本中的一个单词颜色相结合

javascript - 如何使用 JSON 转换和传输 PHP 变量数据到 HTML 页面的 Javascript

python - # -*- 编码 : utf-8 -*- on python3

python - Python 中与时间间隔重叠的总和值