我有以下代码:
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函数,因为它已经扩展为可以使用日期:
jsonify
from Flask import jsonify @app.route('/temp') def temp(): # Load database results # and then ... return jsonify(data=cur.fetchall())
数据将通过一个data包含行数组的单键()作为对象fetchall返回(根据行返回的形式将其表示为数组或对象)。
fetchall
如果需要序列化更多类型(例如,要返回date而不是datetime实例),则需要json_encoder用JSONEncoder知道如何处理类型的子类覆盖Flask的属性:
date
datetime
json_encoder
SONEncoder
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。