我编写了一个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")
答案 0 :(得分:0)
以下是您可以参考的示例:
考虑具有两列user_data
和name
的{{1}}表
eye_color
此查询将为您提供计数和拥有每只彩色眼睛的用户百分比。 请参考this fiddle进行游戏。 您需要找到一种在Python应用程序中适合此查询的方法。