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

#python #sql-server #tsql #machine-learning #microsoft-machine-learning-server

#питон #sql-сервер #tsql #машинное обучение #microsoft-machine-learning-server

Вопрос:

Я пытаюсь сделать что-то полезное с помощью служб машинного обучения SQL и 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:TEMPml.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 FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERPYTHON_SERVICESpython.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 FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERPYTHON_SERVICESLibcustml.py"")
 
 os.system(""C:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERPYTHON_SERVICESpython.exe" "C:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERPYTHON_SERVICESLibcustml.py"")
 
 os.system("python.exe "C:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERPYTHON_SERVICESLibcustml.py"")
 
 os.system("python.exe C:TEMPml.py")
 

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

Спасибо!

Комментарии:

1. Я думаю, что я нашел ответ, который я искал уже в сообщении Нила ( nielsberglund.com/2018/03/07 /… ) . Это было бы @script = N'source("/path/to/my/script/my_python_script.py")';

2.Какую версию SQL server вы используете? Вот несколько ссылок, которые я сохранил по этой теме. Я еще не пошел по этому пути использования Python на SQL Server, но я собираюсь. docs.microsoft.com/en-us/sql/machine-learning/…docs.microsoft.com/en-us/sql/machine-learning /…

3. Спасибо @JasonCook за ваш комментарий. Я использую SQL Server 2017. Я близок к решению, но столкнулся с другой проблемой. Я обновляю вопрос, чтобы отразить его. Спасибо!

Ответ №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 FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERPYTHON_SERVICESLibcustml.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