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