def StatusUpdate(self, table):
inventoryCurs.execute('SELECT * from Table')
for i in inventoryCurs:
html = urlopen(i[5]).read()
Soup = BeautifulSoup(html)
if table.StockStatus(Soup) == 'Out of Stock':
inventoryCurs.execute('''UPDATE table SET status = 'Out of Stock' WHERE id = %s)''', i[0])
inventoryCurs.execute('''UPDATE表SET状态='缺货'WHERE id =%s)''',i [0]) OperationalError:接近“%”:语法错误
答案 0 :(得分:0)
如果没有看到更多代码,很难完全解决问题,但查看代码,我认为问题可能是此行中的%s
:
inventoryCurs.execute('''UPDATE table SET status = 'Out of Stock' WHERE id = %s)''', i[0])
根据Python 2和Python 3中SQLite模块的文档,sqlite3
模块需要?
作为占位符,而不是%s
或一些其他格式字符串。
根据Python 2 documentation,%s
占位符可以这样使用:
import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
# Never do this -- insecure!
symbol = 'IBM'
c.execute("select * from stocks where symbol = '%s'" % symbol)
但这是一个简单的格式字符串,实际上不是数据库的占位符。此外,正如评论所示,您永远不应该以这种方式构建查询,因为它使它们容易受到SQL注入的攻击。相反,您应该使用?
代替这样构建它们:
import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
# Do this instead
t = (symbol,)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
文档中有更多详细信息,但我相信这是您发布的错误的解决方案。