我发现了几个类似的问题,但似乎都无法解释这里发生的情况。
代码:
print type(price)
print type(sale_price)
print type(url)
price=0.0
sale_price=0.0
url="asdf"
dbc.execute("UPDATE logTable SET price=%f, salePrice=%f, modified=NOW() WHERE url=%s", [price, sale_price, url])
输出:
<type 'float'>
<type 'float'>
<type 'str'>
Traceback (most recent call last):
File "./scrape.py", line 102, in <module>
dbc.execute("UPDATE logTable SET price=%f, salePrice=%f, modified=NOW() WHERE url=%s", [price, sale_price, url])
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 210, in execute
query = query % args
TypeError: float argument required, not str
插值字符串中没有杂散的%字符。参数的数量与占位符的数量匹配。类型肯定是正确的。
我尝试使用?占位符,而不是printf样式的占位符,即使文档建议两者都受支持。那给出了一个不同的例外:
Traceback (most recent call last):
File "./scrape.py", line 102, in <module>
dbc.execute("UPDATE logTable SET price=?, salePrice=?, modified=NOW() WHERE url=?", [price, sale_price, url])
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 210, in execute
query = query % args
TypeError: not all arguments converted during string formatting
该异常还会产生大量的StackOverflow答案,但没有一个真正揭示了这里出了什么问题。我确实尝试使用元组而不是列表作为第二个参数来使用两个样式占位符执行,但仍然会得到相同的异常。
相关分类