使用python dict更新MySQL中的表
我有一个值字典,其中键是列名。我想发送一条包含所有要更新数据的update语句。我循环遍历dict键,然后在查询过程中添加相应的值。我被困在如何前进的问题上。以下是我所拥有的:使用python dict更新MySQL中的表,python,mysql,Python,Mysql,我有一个值字典,其中键是列名。我想发送一条包含所有要更新数据的update语句。我循环遍历dict键,然后在查询过程中添加相应的值。我被困在如何前进的问题上。以下是我所拥有的: cart={} sn = request.form['cartSN'] cart["camera_front_SN"] = request.form['frontCameraSN'] cart["battery_board_SN"] = request.form['batterySN'] cart["speaker_bo
cart={}
sn = request.form['cartSN']
cart["camera_front_SN"] = request.form['frontCameraSN']
cart["battery_board_SN"] = request.form['batterySN']
cart["speaker_board_SN"] = request.form['speakerSN']
cart["ibcs_SN"] = request.form['ibcsSN']
table = 'cart_info'
sql = 'UPDATE '+table+' SET {} WHERE cart_SN = '+sn+' '.format(', '.join('{}=%s'.format(k) for k in cart))
print(sql)
db = MySQLdb.connect(host="localhost",
user="nope",
password="*******",
db="cart_data")
cur = db.cursor(MySQLdb.cursors.DictCursor)
cur.execute(sql, [cart.values()])
db.commit()
db.close()
当我运行此命令时,会出现以下错误:
[2018-03-25 06:08:39,972] ERROR in app: Exception on /update [POST]
Traceback (most recent call last):
File "C:\Users\Colin Roberts\AppData\Local\Programs\Python\Python36-32\lib\site-packages\MySQLdb\cursors.py", line 238, in execute
query = query % args
TypeError: not all arguments converted during string formatting
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Colin Roberts\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\Colin Roberts\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\Colin Roberts\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Colin Roberts\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "C:\Users\Colin Roberts\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\Colin Roberts\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "FlaskApp.py", line 154, in cartUpdate
cur.execute(sql, [cart.values()])
File "C:\Users\Colin Roberts\AppData\Local\Programs\Python\Python36-32\lib\site-packages\MySQLdb\cursors.py", line 240, in execute
self.errorhandler(self, ProgrammingError, str(m))
File "C:\Users\Colin Roberts\AppData\Local\Programs\Python\Python36-32\lib\site-packages\MySQLdb\connections.py", line 52, in defaulterrorhandler
raise errorclass(errorvalue)
_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting
我被卡住了。另外,我不喜欢这样的“你的帖子大多是代码;请添加更多详细信息”。不,我的帖子主要是错误消息。但是,我宁愿包含太多的错误消息,也不愿包含太多的错误消息。更改您的SQL
sql = 'UPDATE '+table+' SET {} WHERE cart_SN = '.format(', '.join('{}=%s'.format(k) for k in cart))+sn
因为在你的情况下
sql = 'UPDATE '+table+' SET {} WHERE cart_SN = '+sn+' '.format(', '.join('{}=%s'.format(k) for k in cart))
格式应用于
“”.fomat()
空字符串不是主字符串谢谢。我尝试了此操作,但得到了另一个错误,这是progress!!我现在得到的是TypeError:没有足够的字符串格式参数。此链接可以帮助您做到这一点。我需要在sn变量周围加上单引号。谢谢大家!!欢迎!!@ColinRoberts