2017-07-25 16 views
0

我對Flask和Python很新,我必須將MySql查詢轉換爲json格式。 關於轉換,我面臨價值錯誤,無法理解,請幫助我,謝謝你提前。jsonify上的ValueError

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

你使用什麼版本的燒瓶? –

回答

0

有更好的方法來創建從MySQL查詢字典,這將讓你身邊,你遇到的錯誤。

當你定義你的光標,你應該有它返回的查詢結果詞典列表,像這樣:

cursor = connection.cursor(dictionary=True)

這樣,你的表的每一行是從查詢返回會作爲列表中的字典存在。這將是這個樣子:

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

然後,jsonifying你的結果變得很輕鬆:

return jsonify(result)

從那裏,你將有可通過鑰匙引用元素JSON對象。如果要顯示'firstcol'中的所有值,則只需在您的JavaScript文件中使用response['firstcol']

此外,爲了確保您明確了Flask路由,標題爲'/ post'的路由沒有爲您的路由定義'POST'方法。你需要:

@app.route('/post' methods=['POST'])

我道歉,如果你已經意識到了這一點 - 我剛開始學習瓶幾個月前,最初非常困惑的一些約定,所以我想你可能是和我在同一條船上。

0

您正在使用舊版本的Flask。 0.12改變了jsonify以允許任何類型,以前只允許元組的列表和列表被允許。

pip install -U flask