使用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
相关产品推荐
相关产品推荐

