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

Python实现SQL查询有结果时自动发送带附件邮件

解决SQL无结果时仍发送邮件的问题

问题根源在于你的代码不管SQL查询有没有返回结果,都会执行保存CSV和创建邮件的操作。只需添加一个判断,仅当查询结果非空时才执行后续的文件保存和邮件发送步骤即可。

修改后的完整代码如下:

sql_query = pd.read_sql_query('''
SELECT SaleH.[Order No], SaleH.[Reference], SaleL.[Product code], SaleL.[Description], SaleL.[Quantity], SaleL.[Unit Price], SaleP.[Unit Price] AS 'Selling Price'
FROM [Sales Header] SaleH
INNER JOIN [Sales Line] SaleL ON SaleH.[Order No] = SaleL.[Order No] 
LEFT JOIN [Sales Price] SaleP ON SaleP.[Product Code] = SaleL.[Product Code] AND SaleH.[Customer No] = SaleP.[Customer No]
WHERE SaleH.[Customer No] = 'Cust01' AND SaleH.[Date] > DATEADD(DD,-1,getdate()) AND SaleP.[Unit Price] != SaleL.[Unit Price]
''' ,conn) 
df = pd.DataFrame(sql_query)

# 仅当查询有结果时才执行后续操作
if not df.empty:
    # 保存CSV文件
    csv_path = r'G:\Customer Folder\Customer_Sales_Orders.csv'
    df.to_csv(csv_path, index = False) 
    
    # 配置并发送邮件
    outlook = win32.Dispatch('outlook.application')
    email = outlook.CreateItem(0)
    email.From = "Sender"
    email.To = "Recipient"
    email.Subject = "Customer Sales Orders"            
    # 添加附件
    email.Attachments.Add(csv_path)
    # 发送邮件(原代码缺失此步骤,需补充才能实际发送)
    email.Send()

关键说明:

  • not df.empty:用来判断DataFrame是否包含有效数据,当查询返回0条结果时,这个条件不成立,后续代码不会执行
  • 把保存CSV、创建邮件、添加附件、发送邮件的逻辑都包裹在这个判断里,从根源避免无结果时的无效操作
  • 补充了email.Send(),否则邮件只会留在草稿箱,不会实际发送给收件人

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:15:52