我有以下代码:
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
功能,因为它是already extended to work with dates:
from Flask import jsonify
@app.route('/temp')
def temp():
# Load database results
# and then ...
return jsonify(data=cur.fetchall())
数据将作为一个对象返回,其中包含一个包含行数组的单个键(数据)(这些行将表示为数组或对象,具体取决于fetchall返回行的行).
如果您需要序列化更多类型(在您的情况下,您将获得返回日期而不是datetime实例,则需要覆盖Flask的json_encoder
属性,其子类为JSONEncoder
,它知道如何处理您的类型:
class SpecializedJSONEncoder(JSONEncoder):
def default(o):
if isinstance(o,self).default(o)
然后你可以在你的Flask实例上设置它:
app.json_encoder = SpecializedJSONEncoder
您现在可以处理日期和日期时间.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。