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

Plotly-Dash使用send_data_frame导出DataFrame为CSV失效求助

问题解决方法

问题根源

dash-extensions 0.1.0及之后的版本对Download组件的data参数结构做了不兼容升级:原mime_type字段被重命名为type,但send_data_frame函数未同步更新,仍然返回携带mime_type字段的字典,所以触发非法参数报错,导致下载弹窗无法正常弹出。

解决方案1:修改send_data_frame返回结果(快速修复,改动最小)

直接在下载回调中处理send_data_frame的返回值,替换非法字段名即可,修改后的writeCSV函数代码如下:

@app.callback(
    Output('dataFrame', 'data'),
  [
    Input('button2', 'n_clicks')
  ],[
    State('ohlcData', 'children')
  ], prevent_initial_call=True)
def writeCSV(n_clicks, hiddenDiv):
  dfOHLC = pd.read_json(hiddenDiv, orient='split')
  dfOHLC.index.name = 'Date'
  # 拿到send_data_frame原始返回结果
  res = send_data_frame(dfOHLC.to_csv, 'OHLC.csv')
  # 替换非法字段,删除mime_type,新增type字段
  res['type'] = res.pop('mime_type')
  return res

该方案无需修改其他业务逻辑,改完即可正常触发下载弹窗。

解决方案2:手动构造返回值(不依赖snippets函数,稳定性更高)

如果不想依赖send_data_frame函数,可以自行构造符合Download组件要求的返回结构,代码如下:

import io
import base64

@app.callback(
    Output('dataFrame', 'data'),
  [
    Input('button2', 'n_clicks')
  ],[
    State('ohlcData', 'children')
  ], prevent_initial_call=True)
def writeCSV(n_clicks, hiddenDiv):
  dfOHLC = pd.read_json(hiddenDiv, orient='split')
  dfOHLC.index.name = 'Date'
  # 生成CSV字符串
  csv_buffer = io.StringIO()
  dfOHLC.to_csv(csv_buffer, encoding='utf-8')
  # 构造符合要求的返回字典
  return {
      "filename": "OHLC.csv",
      "content": base64.b64encode(csv_buffer.getvalue().encode()).decode(),
      "base64": True,
      "type": "text/csv"
  }

可选方案:锁定旧版本

如果不想修改代码,可以回退到最后一个兼容的旧版本dash-extensions,执行以下安装命令即可:
pip install dash-extensions==0.0.71

内容的提问来源于stack exchange,提问作者K-83Rick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:05