Импорт скриптов Python в хранимую процедуру SQL Server

#python #sql-server

#python #sql-сервер

Вопрос:

У меня есть куча локальных скриптов Python, которые мне нужно выполнить с локального сервера MS SQL. Нет никаких проблем, если я попытаюсь импортировать стандартные библиотеки Python (например, pandas). При попытке импортировать файл Python, называемый Simulator.py расположенный в C:/Users/amusaeva/PyCharmProjects/ARW/WorkforceModel папка.

 EXEC sp_execute_external_script @language =N'Python',
@script=N'
import sys
sys.path.insert(0, "C:/Users/amusaeva/PyCharmProjects/ARW/WorkforceModel")
import Simulator
'
  

Вот сообщение об ошибке, которое я получаю при запуске этого SQL-скрипта:

Сообщение 39004, уровень 16, состояние 20, строка 0
Во время выполнения скрипта ‘Python’ произошла ошибка скрипта ‘sp_execute_external_script’ с результатом 0x80004004.

Сообщение 39019, уровень 16, состояние 2, строка 0
Произошла ошибка внешнего скрипта:

Ошибка при выполнении. Проверьте выходные данные для получения дополнительной информации. Трассировка (последний последний вызов):
файл «», строка 5, в
файле «C:ProgramDataMSSQLSERVERTemp-PYAppcontainer1D4294516-2993-475D-9F61-DF7C5AF4FE69sqlindb_0.py «, строка 35, в преобразовании

import Simulator
ModuleNotFoundError: нет модуля с именем ‘Simulator’

Ошибка SqlSatelliteCall: ошибка при выполнении. Проверьте выходные данные для получения дополнительной информации.
Стандартные сообщения от внешнего скрипта:
сбой функции SqlSatelliteCall. Пожалуйста, смотрите Вывод консоли для получения дополнительной информации.

Трассировка (последний последний вызов):
файл «C:Program ФайлыMicrosoft SQL ServerMSSQL15.MSSQLSERVERPYTHON_SERVICESlibsite-packagesrevoscalepycomputecontextRxInSqlServer.py» , строка 605, в rx_sql_satellite_call
rx_native_call(«SqlSatelliteCall», параметры)

Файл «C:Program ФайлыMicrosoft SQL ServerMSSQL15.MSSQLSERVERPYTHON_SERVICESlibsite-packagesrevoscalepyRxSerializable.py «, строка 375, в rx_native_call
ret = px_call(functionname, параметры)

Ошибка выполнения: сбой функции revoscalepy.

Я знаю, что определенно есть скрипт Python, который называется Simulator.py в этом каталоге WorkforceModel, и я не думаю, что у меня есть какие-либо синтаксические ошибки, потому что, когда я запускаю точные три строки в Python через окно PS, модуль импортируется без проблем. Почему моя хранимая процедура не видит скрипт Python?

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

1. Вы пробовали sys.path.insert(0, "C:\Users\amusaeva\PyCharmProjects\ARW\WorkforceModel") ?

2. Да, я это сделал. Спасибо за предложение, хотя было бы здорово, если бы это было проблемой.

Ответ №1:

Оказывается, мне нужно было разобраться с некоторыми разрешениями. Я использовал эту статью в качестве источника вдохновения: https://www.red-gate.com/simple-talk/sql/data-science-sql/sql-server-machine-learning-2019-working-with-security-changes / и вот точные шаги, которым я последовал. Контейнеры приложений создаются во время установки SQL Server MLS. Они являются объектами внутри локального каталога Windows и, как и все объекты в локальном каталоге, имеют уникальный идентификатор SID для идентификации контейнера приложения.

Объект All Application Container имеет фиксированный идентификатор SID в локальном каталоге, который является S-1-15-2-1 . Вы можете использовать приложение icacls для предоставления разрешения.

  1. Откройте командную строку от имени администратора.

  2. Выполните следующую команду:

    icacls C:UsersamusaevaPyCharmProjectsARWWorkforceModel /grant *S-1-15-2-1:(OI)(CI)F /t

  3. Откройте диспетчер конфигурации SQL Server, выберите ‘Службы SQL Server’. Найдите «Панель запуска SQL Server», щелкните по ней правой кнопкой мыши и выберите «Перезапустить».

После этого я запустил свой код без проблем (единственное, что мне нужно было изменить, это использование косых C:\Users\amusaeva\PyCharmProjects\ARW\WorkforceModel черт).