jsonify上的ValueError

时间:2017-07-25 12:47:42

标签: python mysql flask

我是Flask和Python的新手,我必须将MySql查询转换为json格式。 在转换时,我面临价值错误而且无法理解,请提前帮助我,谢谢你。

ValueError: dictionary update sequence element #0 has length 8; 2 is required on executing jsonify(r)

@app.route('/post')
def display():
  cursor.execute("select * from tablename")
  result=cursor.fetchall()
  r = [dict((cursor.description[i][0], value) for i, value in enumerate(row)) for row in result]
 return jsonify(r)

2 个答案:

答案 0 :(得分:0)

有一种更好的方法可以从MySQL查询创建字典,它可以帮助您解决您收到的错误。

定义光标时,应该让它将查询结果作为字典列表返回,如下所示:

UnitOfWork

这样,从查询返回的表的每一行都将作为列表中的字典存在。它看起来像这样:

cursor = connection.cursor(dictionary=True)

然后,简化你的结果变得非常简单:

[ {'firstcol': 'value1row1', 'secondcol': 'value2row1'... 'tenthcol': 'value10row1'}, {'firstcol': 'value1row2', 'secondcol': 'value2row2'... 'tenthcol': 'value10row2'}, ... {'firstcol': 'value1row50', 'secondcol': 'value2row50'... 'tenthcol': 'value10row50'} ]

从那里,您将拥有一个JSON对象,其中包含可以通过键引用的元素。如果要显示“firstcol”中的所有值,则只需在JavaScript文件中return jsonify(result)

另外,为了确保您清楚Flask路由,标题路线'/ post'不会为您的路线定义'POST'方法。你需要:

response['firstcol']

如果你已经意识到这一点我很抱歉 - 几个月前我刚刚开始学习Flask并且最初对一些惯例很困惑,所以我想你可能和我一样在同一条船上。

答案 1 :(得分:0)

你正在使用旧版本的Flask。 0.12更改jsonify以允许任何类型,以前只允许使用dicts和元组列表。

pip install -U flask