是否可以从数据库的字符串数据中获取平均整数值?

时间:2019-01-29 11:24:10

标签: python postgresql flask-sqlalchemy

我编写了一个Flask应用程序,该应用程序将获取用户的身高,眼睛颜色和电子邮件地址,并将数据保存到Postgresql数据库中,然后通过电子邮件向用户发送他们给我的数据。我想进行设置,以便用户收到一封电子邮件,其中包含他们的身高和眼睛颜色的平均人数。

当前,我将height设置为Integer值,并将眼睛颜色设置为字符串值。

测试此错误消息:

  

sqlalchemy.exc.ProgrammingError:(psycopg2.ProgrammingError)函数   avg(字符变化)不存在第1行:SELECT avg(data.color_)   AS avg_1 ^提示:没有函数与给定名称匹配   和参数类型。您可能需要添加显式类型转换。 [SQL:   'SELECT avg(data.color_)AS avg_1 \ nFROM数据'](此背景   错误:http://sqlalche.me/e/f405

我相信这是由于我试图从str获取int数据。有没有办法做到这一点?假设有4个人填写了此表单,而所有4个人都说他们有“蓝眼睛”。有没有办法让程序向他们发送100%的平均值?

我的代码如下:

class Data(db.Model):
    __tablename__="data"
    id=db.Column(db.Integer,primary_key=True)
    email_=db.Column(db.String(120), unique=True)
    height_=db.Column(db.Integer)
    color_=db.Column(db.String(6))

@app.route("/success", methods=['POST'])
def success():
    if request.method=='POST':
        email=request.form["email_name"]
        height=request.form["height_name"]
        color=request.form["color_name"]
        send_email(email, height, color)
        if db.session.query(Data).filter(Data.email_==email).count() == 0:
            data=Data(email,height,color)
            db.session.add(data)
            db.session.commit()
            average_height = db.session.query(func.avg(Data.height_)).scalar()
            average_color = db.session.query(func.avg(Data.color_)).scalar()
            print(average_height)
            print(average_color)
            return render_template("success.html")

1 个答案:

答案 0 :(得分:0)

以下是您可以参考的示例:

考虑具有两列user_dataname的{​​{1}}表

eye_color

此查询将为您提供计数和拥有每只彩色眼睛的用户百分比。 请参考this fiddle进行游戏。 您需要找到一种在Python应用程序中适合此查询的方法。