当前位置: 首页 > 面试题库 >

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

钮善
2023-03-14
问题内容

我有以下代码:

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实例),则需要json_encoder用JSONEncoder知道如何处理类型的子类覆盖Flask的属性:

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

现在,你将能够同时处理dates和datetime。



 类似资料:
  • 问题内容: 我想创建一个使用查询来计算值的函数,但返回值时遇到问题: 简而言之,我的查询是: 我收到一个SQL语法错误。 SQL错误(1064):您的SQL语法有错误; 问题答案: 假设这些都是通用名称(表将不是一个很好的表名),问题是您不能使用==进行比较。您还缺少一些关键语法(DECLARE,SELECT INTO等)。 更改为此: MySQL比较函数和运算符 相关问题:MYSQL中的单等于

  • 问题内容: 如何计算MySQL查询返回的行数? 问题答案: 获取查询结果中的总行数… 您可以仅迭代结果并计数。您没有说使用什么语言或客户端库,但是API确实提供了mysql_num_rows函数,该函数可以告诉您结果中的行数。 例如,这在PHP中作为mysqli_num_rows函数公开。编辑问题以提及您正在使用PHP时,这是一个使用mysqli函数的简单示例: 获取符合某些条件的行数… 只需使用

  • 问题内容: 一个简单的问题:如何返回MySQL表的字段类型。我知道还是但是我只想返回那个单个参数。例如: 问题答案: 您可以使用 这将以以下格式返回结果

  • 我刚刚开始学习平均堆栈,我被卡住了。我需要将下面的查询数据发送到前端。 我试过这样做,但没有成功

  • 问题内容: 我有以下从数据库获取十六进制代码的函数 我的问题是我在回调函数中返回了结果,但getColour函数未返回任何内容。我希望getColour函数返回的值。 在我调用getColour的那一刻,它不返回任何内容 我尝试做类似的事情 但当然SELECT查询在返回值时已经完成 问题答案: 您只需要对回调中的db查询结果进行处理。就像。

  • 我是React Native的新手,我正在尝试将第一个查询的数据数组返回到设备屏幕,在那里我可以设置设备。我使用.get()和.then()进行了此工作,但我没有得到更新的事件,所以我已经移动到onSnapshot,似乎在查询端有数据,但无法在屏幕上获得此集合。 出现此错误。如果我删除.then(setDevices),我可以在console.log上看到数据数组 谢谢