打电话msdb.sp_发送电子邮件通过pyodb

2024-04-24 02:47:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图调用一个存储过程来包装T-SQL的sp_send_dbmail过程。它只需创建查询,然后将查询和硬编码的主题和收件人传递给Microsoft提供的存储过程。从sqlmanagementstudio运行时,存储过程按预期执行,我收到一封电子邮件。从pyodbc,它不发送电子邮件。存储过程的内容类似于:

declare @qry varchar(MAX)
set @qry = 'select * from table'

EXEC msdb.dbo.sp_send_dbmail    
@recipients = 'email@email.com',
@subject = 'my email',
@query = @qry

select * from table
where 1=0

我也尝试过切换@exclude\u query_输出,但没有效果。我通过以下方法调用该存储过程:

^{pr2}$

其中查询只是执行我的包装存储过程。正如我前面提到的,包装器存储过程在从managementstudio运行时可以工作,但是在这里调用时不会发送电子邮件。我在这两个地方使用相同的凭据访问我的数据库。我还使用这个函数成功地调用了其他存储过程,但它们都没有包含exec语句,也没有完成sp_send_dbmail正在做的其他许多事情。在

如果你有什么想法,请告诉我。在

谢谢, 马克斯·戈德曼


Tags: fromsend编码主题sql过程电子邮件email
1条回答
网友
1楼 · 发布于 2024-04-24 02:47:17

所以我认为这可以归结为对sendmail存储过程、pyodbc或两者的误解。我有另一种方法来调用编辑数据库的存储过程:

def execute_commit_sproc(query, cnxn):
cursor = cnxn.cursor();
cursor.execute(query)           
cnxn.commit()

唯一的区别是前者需要一个结果集,而后者对数据库进行更改,并使用pyodbc的提交机制保存结果。我没有意识到sp_send_dbmail需要调用此函数才能发送电子邮件。我仍然不确定原因(写什么,pyodbc::commit()在幕后做什么,等等)

相关问题 更多 >