如何从Flask应用中的MySQL查询返回数据?

我有以下代码:

import flask as fk

import MySQLdb

import JSONEncoder

class SpecializedJSONEncoder(JSONEncoder):

def default(o):

if isinstance(o, date):

return date.strftime("%Y-%m-%d")

else:

super(SpecializedJSONEncoder, self).default(o)

app = fk.Flask(__name__)

app.json_encoder = SpecializedJSONEncoder

app.debug = True

@app.route("/")

def home():

return "Hello world"

@app.route("/temp")

def temp():

db = MySQLdb.connect("localhost", "root", "","test")

cur = db.cursor()

query = "SELECT DATE(DTM), POM, ROUND(MIN(TMP),1) FROM dados_meteo WHERE POM = %s AND DATE(DTM) >= %s AND DATE(DTM) <= %s"

param = ("Faro", "2013-12-01", "2013-12-05")

cur.execute(query, param)

data = cur.fetchall()

return data.json_encoder()

if __name__ == "__main__":

app.run()

返回的错误是:ImportError:没有名为JSONEncoder的模块

回答:

使用Flask的内置jsonify函数,因为它已经扩展为可以使用日期:

from Flask import jsonify

@app.route('/temp')

def temp():

# Load database results

# and then ...

return jsonify(data=cur.fetchall())

数据将通过一个data包含行数组的单键()作为对象fetchall返回(根据行返回的形式将其表示为数组或对象)。

如果需要序列化更多类型(例如,要返回date而不是datetime实例),则需要json_encoder用JSONEncoder知道如何处理类型的子类覆盖Flask的属性:

class SpecializedJSONEncoder(JSONEncoder):

def default(o):

if isinstance(o, date):

return date.strftime("%Y-%m-%d")

else:

super(SpecializedJSONEncoder, self).default(o)

然后可以在Flask实例上设置它:

app.json_encoder = SpecializedJSONEncoder

现在,你将能够同时处理dates和datetime。

以上是 如何从Flask应用中的MySQL查询返回数据? 的全部内容, 来源链接: utcz.com/qa/429627.html

回到顶部