我是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)
答案 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