我有以下代码:
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 http://flask.pocoo.org/docs/api/#flask.json.jsonify函数,原样已经扩展到可以处理日期 http://flask.pocoo.org/docs/api/#flask.json.JSONEncoder:
from Flask import jsonify
@app.route('/temp')
def temp():
# Load database results
# and then ...
return jsonify(data=cur.fetchall())
数据将作为具有单个键的对象返回(data
)包含行数组(将表示为数组或对象,具体取决于什么fetchall
返回行为)。
如果您需要序列化更多类型(就像您的情况一样,您将返回date
而不是datetime
实例,你需要覆盖 Flask 的json_encoder http://flask.pocoo.org/docs/api/#flask.Flask.json_encoder具有子类的属性JSONEncoder http://flask.pocoo.org/docs/api/#flask.json.JSONEncoder它知道如何处理你的类型:
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
您现在将能够处理date
以及datetime
s.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)