如何从Flask应用中的MySQL查询返回数据?
我有以下代码:
import flask as fkimport 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