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

前端之家收集整理的这篇文章主要介绍了如何从Flask应用程序中的MySQL查询返回数据?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有以下代码

  1. import flask as fk
  2. import MysqLdb
  3. import JSONEncoder
  4. class SpecializedJSONEncoder(JSONEncoder):
  5. def default(o):
  6. if isinstance(o,date):
  7. return date.strftime("%Y-%m-%d")
  8. else:
  9. super(SpecializedJSONEncoder,self).default(o)
  10. app = fk.Flask(__name__)
  11. app.json_encoder = SpecializedJSONEncoder
  12. app.debug = True
  13. @app.route("/")
  14. def home():
  15. return "Hello world"
  16. @app.route("/temp")
  17. def temp():
  18. db = MysqLdb.connect("localhost","root","","test")
  19. cur = db.cursor()
  20. query = "SELECT DATE(DTM),POM,ROUND(MIN(TMP),1) FROM dados_meteo WHERE POM = %s AND DATE(DTM) >= %s AND DATE(DTM) <= %s"
  21. param = ("Faro","2013-12-01","2013-12-05")
  22. cur.execute(query,param)
  23. data = cur.fetchall()
  24. return data.json_encoder()
  25. if __name__ == "__main__":
  26. app.run()

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

最佳答案
使用Flask的内置jsonify功能,因为它是already extended to work with dates

  1. from Flask import jsonify
  2. @app.route('/temp')
  3. def temp():
  4. # Load database results
  5. # and then ...
  6. return jsonify(data=cur.fetchall())

数据将作为一个对象返回,其中包含一个包含行数组的单个键(数据)(这些行将表示为数组或对象,具体取决于fetchall返回行的行).

如果您需要序列化更多类型(在您的情况下,您将获得返回日期而不是datetime实例,则需要覆盖Flask的json_encoder属性,其子类为JSONEncoder,它知道如何处理您的类型:

  1. class SpecializedJSONEncoder(JSONEncoder):
  2. def default(o):
  3. if isinstance(o,self).default(o)

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

  1. app.json_encoder = SpecializedJSONEncoder

您现在可以处理日期和日期时间.

猜你在找的MySQL相关文章