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

使用Python和Airflow发送Redshift查询结果邮件时表格显示异常求助

解决方案

问题根因为你代码里的late_dags变量直接输出了DataFrame的纯文本格式,没有转换成HTML表格标签,所以邮件渲染时只会展示无格式的杂乱文本,按以下步骤调整即可:

第一步:将Pandas DataFrame转换为HTML表格

直接调用Pandas内置的to_html()方法,可同步配置基础样式适配邮件渲染:

# late_dags_df为你存储Redshift查询结果的DataFrame
late_dags = late_dags_df.to_html(
    border=1,
    justify='left',
    col_space=150,
    index=False # 不需要展示DataFrame行索引时设为False
)

第二步:调整邮件代码

你现有代码的mime_subtype参数多余,传html_content时Airflow的send_email方法会自动处理多部分内容,直接去掉该参数避免冲突即可,还可补充全局样式优化表格展示效果:

html_content = f"""
<html>
  <head>
    <!-- 自定义表格样式,适配绝大多数邮件客户端 -->
    <style>
      table {border-collapse: collapse;}
      th, td {padding: 8px; text-align: left; border: 1px solid #ddd;}
      th {background-color: #f2f2f2;}
    </style>
  </head>
  <body>
    <p>Hello,</p>
    <p>Found {num_of_late_dags} Late DAGs:</p>
    {late_dags}
    <p>Regards,</p>
    <p>Me</p>
  </body>
</html>
"""
send_email(
    to=v_email_recipients_daily_report,
    cc=cc,
    bcc=bcc,
    subject='Daily DAG Load Report',
    html_content=html_content
)

可选优化

可以提前判断DataFrame是否为空,避免输出无意义的空表格:

if late_dags_df.empty:
    late_dags = "<p>当前无滞后DAG,运行正常</p>"
else:
    late_dags = late_dags_df.to_html(...)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:39:00