从MSSQL运行Python脚本

时间:2017-06-09 18:54:09

标签: python sql-server sql-server-2008 cmd anaconda

我想从MSSQL 2008运行或执行Python脚本。

我有一个带python的服务器,我想要的是本地网络中的任何PC都可以使用一些输入执行该脚本,这些输入存储在MSSQL 2008 R2中。 python脚本使用pandas(read_sql)读取这些变量,然后进行一些分析,它返回一个图像和一个表,它们都保存在服务器的文件夹中,任何人都可以看到它。

我遇到的问题是:如何执行另一台拥有python的计算机中的python脚本,但我没有它,我只需要存储的输出,但这些输出随时间变化,所以我必须随时执行该脚本吗?

我一直在尝试使用带有cmd作业(操作系统(CmdExec))的MSSQL 20008,这里是代码:

USE msdb ;  
GO  
EXEC dbo.sp_add_job  
    @job_name = N'hola' ;  
GO  
EXEC sp_add_jobstep  
    @job_name = N'hola',  
    @step_name = N'hola1',  
    @subsystem = N'CMDEXEC',  
    @command = N'python \..\script.py',   
    @retry_attempts = 1,  
    @retry_interval = 1;
GO  

我执行它的每一部分但我没有得到任何错误,但当我来看看图像是否已创建时,我无法找到它。 (我将图像保存到已知文件夹:fig.savefig(' C:\ Images3 \\ Prueba3.png'))

我也尝试使用xp_cmdshell

EXEC xp_cmdshell 'python \\server\script.py';  
GO

但它返回了这个错误:"" python"没有重新考虑联合国内部和外部的#34;,但是python是在系统的路径上。当我使用cmd和i entre python时,它会打开python,当我输入" python \ server \ script.py"它执行脚本

同样使用xp_cmdshell我尝试使用powershell,并使make和脚本执行python,当我在电源shell中执行该脚本时它可以工作,但是当我输入这段代码时:

EXEC xp_cmdshell 'powershell.exe -ExecutionPolicy Unrestricted -file  C:\Images3\script.ps1';  
GO 

它给出了与前一个" EXEC xp_cmdshell' python \ server \ script.py'"相同的错误。

我正在使用anaconda python,当我在CMD中输入路径时,它就在那里:使用PATH查看图像 enter image description here

但我不知道如何执行它。

请有人帮忙,或了解其他方法。

我非常感谢您的时间和支持

度过美好的一天!

1 个答案:

答案 0 :(得分:1)

使用

EXEC xp_cmdshell 'C:/.../python.exe C:\...\script.py';  
GO

一个问题是你需要在xp_cmdshell中使用.exe,所以只要使用python命令它就不起作用,你必须使用python.exe。 另一个问题是python脚本必须在执行脚本的计算机中,以前脚本在公共服务器中,但是它拒绝了权限,并且当脚本被更改为该服务器的目录时,它工作了! / p>