代码之家  ›  专栏  ›  技术社区  ›  montymagic9

如何使用Flask MySQLAlchemy进行这个特定的sql查询?

  •  -1
  • montymagic9  · 技术社区  · 8 年前

    我正在尝试使用以下代码查询和获取数据库的最后一行:

    from flask import Flask, render_template, redirect, url_for
    from flask_bootstrap import Bootstrap
    from flask_wtf import FlaskForm
    from wtforms import StringField, PasswordField, BooleanField
    from wtforms.validators import InputRequired, Email, Length
    from flask_sqlalchemy  import SQLAlchemy
    from werkzeug.security import generate_password_hash, check_password_hash
    from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
    import json
    
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'removed'
    app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(
        username="removed",
        password="removed",
        hostname="removed",
        databasename="removed",
    )   #used to use sqlite here so potential for errors...
    app.config["SQLALCHEMY_POOL_RECYCLE"] = 299 #do i need this line and below line???
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
    bootstrap = Bootstrap(app)
    db = SQLAlchemy(app)
    login_manager = LoginManager()
    login_manager.init_app(app)
    login_manager.login_view = 'login'
    
    class temperaturelog(db.Model):
        TemperatureID = db.Column(db.Integer, primary_key=True)
        Temperature = db.Column(db.Float(5))
        dTime = db.Column(db.DateTime) #check the actual data types here
    
        def __init__(self, TemperatureID, Temperature, dTime):
            self.TemperatureID = TemperatureID
            self.Temperature = Temperature
            self.dTime = dTime
    
        def __repr__(self):
            return '%r' % self.Temperature
    
    def getTemperatureData():
        #need to convert this query into sqlalchemy queries "SELECT * FROM readings ORDER BY ID DESC LIMIT 1";
        #need to connect/use the right table below
        #data = jsonify(temperaturelog.query.order_by(temperaturelog.dTime.desc()).first())
        datalist = {}
        data = temperaturelog.query.order_by(temperaturelog.TemperatureID.desc()).first()
        data = data.Temperature
        datalist["temperature"] = data
        datalist["datetime"] = "12-12-12 23-23-23"
        datalist = json.dumps(datalist)
        return datalist
    

    在这里,我连接到一个在线数据库(我使用Pythonywhere来承载这一切),我需要数据库中的最后一行数据,我相信通常的SQL命令是:

    "SELECT * FROM readings ORDER BY ID DESC LIMIT 1";
    

    然而,当我使用下面的代码尝试检索dTime值以进行进一步处理时,它抛出的错误对象“float”没有属性。因此,我的查询只是返回温度,如何使查询返回最后一行,以便使用。温度和。数据访问特定值的时间?

    data2 = data.dTime
    datalist["datetime"] = data2
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   SergiyKolesnikov    8 年前

    在里面 getTemperatureData() 您使用 data 首先存储查询结果集的变量:

    data = temperaturelog.query.order_by(temperaturelog.TemperatureID.desc()).first()
    

    在下一行中覆盖 数据 温度(可能是浮子):

    data = data.Temperature
    

    所以,下次你尝试使用 数据 ,它包含一个浮点,而不是结果集。 将第二行中的变量重命名为,例如 data_temperature