【发布时间】:2019-01-29 11:24:10
【问题描述】:
我编写了一个烧瓶应用程序,它获取用户的身高、眼睛颜色和电子邮件地址,并将数据保存到 postgresql 数据库,然后通过电子邮件向用户发送他们提供给我的数据。我想设置它,以便用户收到一封电子邮件,其中包含平均人数的身高和眼睛颜色。
目前我将高度设置为整数值,将眼睛颜色设置为字符串值。
测试这个我收到了这个错误信息:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) 函数 avg(字符变化)不存在第 1 行:SELECT avg(data.color_) AS avg_1 ^ 提示:没有函数与给定名称匹配 和参数类型。您可能需要添加显式类型转换。 [SQL: 'SELECT avg(data.color_) AS avg_1 \nFROM data'] (背景 错误: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")
【问题讨论】:
-
你不能有平均的字符串和眼睛的颜色。但是您可以显示用户和蓝眼睛的百分比。
-
@Ubercool 啊是的,显示百分比可能会更好。有没有办法从桌子本身做到这一点?就像,我能否计算“color_name”出现在表中的次数,然后将其除以列数,然后乘以 100?对不起,如果这个问题看起来很愚蠢,我对数据库比较陌生。
标签: python postgresql flask-sqlalchemy