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

