Python ValueError:'字典更新序列元素#0的长度为4; 2是必需的'

时间:2017-07-21 19:24:45

标签: python mysql json

我创建了一个方法,从数据库中提取数据,将其转换为json格式并返回JSON响应。

    def getEchoResource(self):
        try:
           row = self.cursor.execute("SELECT * FROM echo_resource_log WHERE DATE(last_update) = CURDATE();")
           if row:
              response = app.response_class(response=json.dumps(dict(self.cursor.fetchall())), status=200, mimetype='application/json')
              return response
        except MySQLdb.Error as e:
           logger.error("Error %d: %s" % (e.args[0],e.args[1]))
        except Exception, e:
           logger.error("Error : ", str(e))

该方法抛出此错误消息 - ValueError:'字典更新序列元素#0的长度为4; 2是必需的'

追踪 -

>/app/worker/echo/apps/opsware_flask_rest_app/opsware_flask_rest_app/
 updateEchoResource.py(123)getEchoResource()
-> row = self.cursor.execute("SELECT * FROM echo_resource_log WHERE 
  DATE(last_update) = CURDATE();")
 (Pdb) n
 >/app/worker/echo/apps/opsware_flask_rest_app/opsware_flask_rest_app/
  updateEchoResource.py(124)getEchoResource()
-> if row:
 (Pdb) n
 >/app/worker/echo/apps/opsware_flask_rest_app/opsware_flask_rest_app/
  updateEchoResource.py(125)getEchoResource()
-> response = 
  app.response_class(response=json.dumps(dict(self.cursor.fetchall())), 
  status=200, mimetype='application/json')
 (Pdb) n
  ValueError: 'dictionary update sequence element #0 has length 4; 2 is 
  required'
 >/app/worker/echo/apps/opsware_flask_rest_app/opsware_flask_rest_app/
  updateEchoResource.py(125)getEchoResource()

行返回 -

('n3pvap168', 'X2Linux_NSS', 'Contact does not exist in Contacts table', datetime.datetime(2017, 7, 21, 4, 27, 37))

1 个答案:

答案 0 :(得分:2)

您可能知道的Python字典是一组无序的键值对。因此,字典中的每个条目都必须有一个键和一个值。这里发生的是你试图将一个四个对象的序列转换成一个字典,如你的行所示(因此错误预期长度为2,长度为4)。

要解决此问题,您需要将4长度数据结构转换为2长度数据结构。这可以通过创建长度为2的数组并将要用作数组的0索引中的键和1-index中的其余行的字符串存储来完成。您可以使用切片来实现此目的。