簡體   English   中英

如何從Flask應用程序中的MySQL查詢返回數據?

[英]How to return data from a MySQL query in a Flask app?

我有以下代碼:

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函數,因為它已經擴展為使用日期

from Flask import jsonify

@app.route('/temp')
def temp():
    # Load database results
    # and then ...
    return jsonify(data=cur.fetchall())

數據將作為一個對象返回,其中包含一個包含行數組的單個鍵( data )(這些行將表示為數組或對象,具體取決於fetchall返回行的行)。

如果你需要序列化更多類型(在你的情況下,你得到的是date而不是datetime實例),你需要使用知道如何處理類型的JSONEncoder的子類來覆蓋Flask的json_encoder屬性:

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

您現在可以處理datedatetime

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM