You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask应用从SQLite取数据用Pandas绘图报KeyError错误求助

错误根因

pd.read_sql_table() 方法的 columns 参数需传入列表格式的列名组合,你当前传入的是单个字符串 'time'/'tuhgaz',Pandas会将字符串识别为可迭代对象拆解为单个字符遍历,尝试查找名为 t 的列,直接触发 KeyError: 't' 报错。

修复方案

方案1:修改Pandas读取逻辑(最小改动)

直接调整columns参数格式,同时一次读取两列减少数据库查询次数,最终转换为列表传给前端绘图:

@app.route('/newdiagram')
def newdiagram():
    cxn = sqlite3.connect('blog.db')
    data = pd.read_excel('new46_1k1.xlsx', sheet_name='sheet1')
    data.to_sql(name='tablekot', con=cxn, if_exists='append', index=False)
    cxn.commit()
    cxn.close()
    engine = create_engine('sqlite:///blog.db')
    # 一次读取所需两列,columns参数传列表
    df = pd.read_sql_table('tablekot', con=engine, columns=['time', 'tuhgaz'])
    # 转成前端绘图可用的列表格式,时间列可按需转字符串
    labels = df['time'].dt.strftime('%Y-%m-%d %H:%M:%S').tolist()
    values = df['tuhgaz'].tolist()
    return render_template("newdiagram.html", labels=labels, values=values)

方案2:使用Flask-SQLAlchemy模型查询(更符合项目规范)

你已经定义了Tablekot模型,无需额外引入sqlite3、pandas、sqlalchemy引擎即可完成数据查询:

@app.route('/newdiagram')
def newdiagram():
    # 可选:只在第一次请求时写入Excel数据,避免重复插入
    if Tablekot.query.first() is None:
        data = pd.read_excel('new46_1k1.xlsx', sheet_name='sheet1')
        cxn = sqlite3.connect('blog.db')
        data.to_sql(name='tablekot', con=cxn, if_exists='append', index=False)
        cxn.commit()
        cxn.close()
    # 直接用模型查询数据
    records = Tablekot.query.all()
    labels = [record.time.strftime('%Y-%m-%d %H:%M:%S') for record in records]
    values = [record.tuhgaz for record in records]
    return render_template("newdiagram.html", labels=labels, values=values)
注意事项
  • 原有逻辑每次访问/newdiagram都会重复插入Excel数据,建议加存在性判断避免数据冗余
  • 需保证Excel文件的列名和Tablekot模型定义的列名完全一致,避免写入时列不匹配
  • 前端绘图一般要求传入标准列表格式,不要直接传递DataFrame对象到模板

内容的提问来源于stack exchange,提问作者Denis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:06:03