SQL ServerML. Внешний скрипт Python: ошибка отказа в доступе

Я пытаюсь сделать что-то полезное с помощью SQL Machine Learning Services и Python.

Я пытаюсь включить внешний скрипт Python в код SQL. На данный момент я тестирую SQL Server Management Studio на SQL Server 2019 Dev Edition.

Следуя за Нильсом Берглундом, я делаю отличную статью:

      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

Я убедился, что скрипт имеет правильные разрешения:

Я даже пытался просто назначить полный контроль для Everyone . Я не вижу никаких ошибок ни в 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")

Любая идея очень приветствуется.

Благодарю вас!

1 ответ

Наконец-то я смог выполнить эту работу:

  • Передача python /script location/ в os.system.
  • Размещение скрипта в custпапка внутри служб python в моем экземпляре SQL Server. Я не слишком этому рад. Кажется, это вопрос прав доступа к папке, но я много пытался имитировать их в другой более удобной папке, мне не удалось заставить ее работать успешно.

Вот как это выглядит:

      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 
Другие вопросы по тегам