【问题标题】:SQL Server ML. External Python Script: Access Denied ErrorSQL Server 机器学习。外部 Python 脚本:访问被拒绝错误
【发布时间】:2020-12-22 20:24:51
【问题描述】:

我正在尝试使用 SQL 机器学习服务和 Python 做一些有用的事情。

我正在尝试将外部 python 脚本包含到 SQL 代码中。目前我正在 SQL Server 2019 开发版上的 SQL Server Management Studio 上进行测试。

关注Niels Berglund,我正在做的优秀文章:

EXEC sp_execute_external_script
@language =N'Python', 
@script=N'
import os
os.system("C:\TEMP\ml.py")
OutputDataSet = InputDataSet
print("Say Hello from SQL Server Management Studio")
',
@input_data_1 =N'SELECT 42' 
WITH RESULT SETS (([TheAnswer] int not null));  
GO 

我的ml.py 脚本是这样的:

#!"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\python.exe"
print("Say Hello from the external script")

当我运行我的 T-SQL 脚本时,我得到了这个:

STDERR message(s) from external script: 
Access Denied

STDOUT message(s) from external script: 
Say Hello from SQL Management Studio


(1 row affected)

Completion time: 2020-12-23T08:51:59.9264251-05:00

我确保脚本具有我认为正确的权限:

我什至尝试将完全控制权分配给所有人。我在 SQL 或 Windows 事件查看器上都没有看到任何错误。

我尝试了os.system() 的以下变体,但没有成功:

os.system("\"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\Lib\cust\ml.py\"")
os.system("\"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\python.exe\" \"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\Lib\cust\ml.py\"")
os.system("python.exe \"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\Lib\cust\ml.py\"")
os.system("python.exe C:\TEMP\ml.py")

非常欢迎任何想法。

谢谢!

【问题讨论】:

标签: python sql-server tsql machine-learning microsoft-machine-learning-server


【解决方案1】:

我终于能够通过以下方式完成这项工作:

  • python /script location/ 传递给 os.system
  • 将脚本放在我的 SQL Server 实例中 python 服务内的 cust 文件夹中。我对此并不太高兴。这似乎是文件夹权限的问题,但我尝试在另一个更方便的文件夹上模仿它们,但无法使其成功运行。

看起来是这样的:

EXEC sp_execute_external_script
@language =N'Python', 
@script=N'
import os
os.system("python \"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\Lib\cust\ml.py\"")

OutputDataSet = InputDataSet
print("Say Hello from SQL Server Management Studio")
',
@input_data_1 =N'SELECT 42' 
WITH RESULT SETS (([TheAnswer] int not null));  
GO 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2023-03-18
    相关资源
    最近更新 更多