在Python Flask中显示数据库结果:ValueError:字典更新序列元素#0的长度为6; 2是必需的

zac*_*con 2 python mysql flask

如何使用python flask在CocoaRestClient中显示我的数据库查询结果?

这是代码:

import json
import sys
import datetime
import MySQLdb as mdb
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/home')
def hello_world():
    return "Welcome to Omnimoda."

@app.route('/items/list')
def get_items():
    #Change accordingly:
    #Connection Details:
    hostname = "localhost"
    username = "un"
    password = "pw"
    database = "db"
    q_list_one = "SELECT * FROM item_info"
    con = mdb.connect(hostname, username, password, database)
    cur = con.cursor()
    json_return = {}
    try:
        cur.execute(q_list_one)
        r_list_one = cur.fetchall()
    except Error as error:
        print(error)
    finally:
        cur.close()
        con.close()

    return jsonify(r_list_one)

if __name__ == '__main__':
    app.run(host = '0.0.0.0', debug=True)
Run Code Online (Sandbox Code Playgroud)

jsonify这里得到了一点,但我得到的只是一个ValueError: dictionary update sequence element #0 has length 6; 2 is required(完整的错误追溯)

没有jsonify,我得到一个TypeError: 'tuple' object is not callable.

这是数据库的样子:

还有什么我可以尝试的吗?谢谢.

在此输入图像描述

sky*_*489 7

你使用jsonify错了.您需要将它与关键字参数一起使用,就像您提到的链接中的答案一样:

return jsonify(data=r_list_one)
Run Code Online (Sandbox Code Playgroud)

官方文档给出了一个例子:

return jsonify(username=g.user.username,
               email=g.user.email,
               id=g.user.id)
Run Code Online (Sandbox Code Playgroud)

上面的代码会产生如下响应:

{
    "username": "admin",
    "email": "admin@localhost",
    "id": 42
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到使用时必须使用关键字jsonify.