如何在SQL Server代理作业中以管理员身份执行Python脚本

时间:2019-02-13 21:59:45

标签: python sql sql-server tsql

我有一个Python (3.7.2)文件,它从第三方API提取数据,将数据保存在CSV上的本地Windows Server 2016文件中,然后执行了{{1 }}放入bulk import(13.0.4224.16)的实例中。

如果我从提升权限的命令提示符下手动运行脚本,这将没有问题。但是,我不想手动运行此脚本,因为我希望它每小时执行一次。我知道如何从服务器操作系统上的SQL Server 2016进行计划,但是我想使用Task Scheduler作为自动作业进行计划。这样,我可以使用SQL Server Agent直接管理/跟踪作业,而不必登录服务器本身来检查计划的任务。

我目前有一个配置为SSMS类型的1步且Operating system (CmdExec)设置为Command:的作业:

enter image description here

我对上述内容的看法是,将打开"C:\Windows\System32\cmd.exe" "python C:\PythonScripts\myPython.py"并使用我提供的python路径调用cmd.exe程序。

但是,当我运行作业时,它只是挂在python.exe的状态而从未完成。手动运行时,脚本会在9秒内成功完成:

enter image description here

这里有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您尝试使用sp_execute_external_script吗?

execute sp_execute_external_script 
@language = N'Python', 
@script = N'
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
'

例如,可以将此代码调度到SqlAgent中。

答案 1 :(得分:0)

我可以通过以下方式解决问题:添加凭据/代理帐户,将其分配给Run as,然后将Command更改为以下样子:

C:\Windows\System32\cmd.exe /C python "C:\PythonScripts\myPython.py"