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

标签 python mysql flask

我有以下代码:

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: No module named 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,将表示为数组或对象) > 返回行作为)。

如果您需要序列化更多类型(如您的情况,您返回的是 date 而不是 datetime 实例,您将需要覆盖 Flask 的 json_encoder 属性使用 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

关于python - 如何从 Flask 应用程序中的 MySQL 查询返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21709992/

相关文章:

python - 实现描述符的正确方法是什么?

python - Scrapy - 从多个页面解析数据

python - 如何使用 Pandas 数据结构来计算自相关?

mysql - 通过 MySQL Workbench 连接到远程计算机中的数据库

python - Flask-RESTPlus - 如何获取查询参数?

python - 无法安装 Flask-Mail

python - tkinter 与 glib mainloop 的集成

MYSQL 查询每周获取新客户

php - 无法显示数组结果

python - 使用 Plesk 在 Apache 下运行 Flask 应用程序