Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python dict更新MySQL中的表_Python_Mysql - Fatal编程技术网

使用python dict更新MySQL中的表

使用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

我有一个值字典,其中键是列名。我想发送一条包含所有要更新数据的update语句。我循环遍历dict键,然后在查询过程中添加相应的值。我被困在如何前进的问题上。以下是我所拥有的:

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