#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
для предоставления разрешения.
-
Откройте командную строку от имени администратора.
-
Выполните следующую команду:
icacls C:UsersamusaevaPyCharmProjectsARWWorkforceModel /grant *S-1-15-2-1:(OI)(CI)F /t
-
Откройте диспетчер конфигурации SQL Server, выберите ‘Службы SQL Server’. Найдите «Панель запуска SQL Server», щелкните по ней правой кнопкой мыши и выберите «Перезапустить».
После этого я запустил свой код без проблем (единственное, что мне нужно было изменить, это использование косых C:\Users\amusaeva\PyCharmProjects\ARW\WorkforceModel
черт).