2017-07-25 3 views
0

Ich bin sehr neu zu Flask und Python, ich muss eine MySql-Abfrage in JSON-Format konvertieren. Bei der Konvertierung, ich bin mit Wert Fehler und unfähig zu verstehen, bitte helfen Sie mir, danke im Voraus.ValueError auf Jsonify

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

Was ist, wenn Sie die Listenklammern entfernen und es nur ein Diktat machen? –

+0

Welche Version der Flasche verwenden Sie? –

Antwort

0

Es gibt einen besseren Weg, Wörterbücher von MySQL-Abfragen zu erstellen, und es wird Sie rund um die Fehlermeldung erhalten, die Sie erhalten.

Wenn Sie den Cursor definieren, sollten Sie es Ihre Abfrage-Ergebnisse als eine Liste der Wörterbücher zurückkehren, etwa so:

cursor = connection.cursor(dictionary=True)

Auf diese Weise jede Zeile der Tabelle, die von der Abfrage zurückgegeben wird, existieren als ein Wörterbuch innerhalb einer Liste. Es würde wie folgt aussehen:

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

Dann Ihre Ergebnisse jsonifying wird einfach leicht:

return jsonify(result)

Von dort haben Sie eine JSON-Objekt mit Elementen, die durch Schlüssel verwiesen werden kann. Wenn Sie alle Werte von 'firstcol' anzeigen möchten, benötigen Sie nur response['firstcol'] in Ihrer JavaScript-Datei.

Auch um sicherzustellen, dass Sie sich beim Flask-Routing klar sind, definiert das Bezeichnen Ihrer Route/Post keine POST-Methode für Ihre Route. Sie müssten:

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

Ich entschuldige mich, wenn Sie bereits wissen das waren - ich habe gerade angefangen Flask vor ein paar Monaten zu lernen und war zunächst über einige der Konventionen ziemlich verwirrt, so kann ich mir vorstellen kann im selben Boot wie ich war.

0

Sie verwenden eine alte Version von Flask. 0.12 änderte jsonify, um jeden Typ zu erlauben, zuvor waren nur Dicts und Listen von Tupeln erlaubt.

pip install -U flask