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.
这是数据库的样子:
还有什么我可以尝试的吗?谢谢.

你使用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.