在SQL Server存储过程中导入Python脚本

3

我有一堆本地Python脚本需要从本地MS SQL Server执行。如果尝试导入标准的Python库(例如pandas),则没有问题。当我尝试导入一个名为Simulator.py的Python文件时,该文件位于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脚本时出现以下错误信息:

Msg 39004,级别16,状态20,行0
执行'sp_execute_external_script'时发生“Python”脚本错误,HRESULT为0x80004004。

Msg 39019,级别16,状态2,行0
发生外部脚本错误:

执行错误。查看输出获取更多信息。 Traceback(最近的调用):
文件 "",第5行,在
文件“C:\ ProgramData \ MSSQLSERVER \ Temp-PY \ Appcontainer1 \ D4294516-2993-475D-9F61-DF7C5AF4FE69 \ sqlindb_0.py”,第35行,在transform中

导入Simulator
ModuleNotFoundError:没有名为'Simulator'的模块

SqlSatelliteCall错误:执行错误。请查看输出以获取更多信息。
来自外部脚本的STDOUT消息:
SqlSatelliteCall函数失败。有关详细信息,请参阅控制台输出。

Traceback(最近的调用):
文件“C:\Program Files \ Microsoft SQL Server \ MSSQL15.MSSQLSERVER \ PYTHON_SERVICES \ lib \ site-packages \ revoscalepy \ computecontext \ RxInSqlServer.py”,第605行,在rx_sql_satellite_call中
rx_native_call("SqlSatelliteCall", params)

文件“C:\Program Files \ Microsoft SQL Server \ MSSQL15.MSSQLSERVER \ PYTHON_SERVICES \ lib \ site-packages \ revoscalepy \ RxSerializable.py”,第375行,在rx_native_call中
ret = px_call(functionname,params)

RuntimeError:revoscalepy函数失败。

我知道在WorkforceModel目录中肯定有一个名为Simulator.py的Python脚本,并且我认为没有语法错误,因为当我通过PS窗口运行完全相同的三行Python代码时,该模块可以顺利导入。但是为什么我的存储过程无法看到Python脚本?


你尝试过 sys.path.insert(0, "C:\\Users\\amusaeva\\PyCharmProjects\\ARW\\WorkforceModel") 吗? - AlwaysLearning
是的,我做了。谢谢你的建议,不过如果这是问题的话那就太棒了。 - Aina
1个回答

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来标识应用程序容器。
所有应用程序容器对象在本地目录中都有一个固定的SID,即S-1-15-2-1。您可以使用应用程序icacls来授予权限。
  1. 以管理员身份打开命令提示符。

  2. 运行以下命令:

    icacls C:\Users\amusaeva\PyCharmProjects\ARW\WorkforceModel /grant *S-1-15-2-1:(OI)(CI)F /t

  3. 打开 SQL Server 配置管理器,选择“SQL Server 服务”。找到“SQL Server Launchpad”,右键单击并选择“重新启动”。

之后我没有遇到任何问题就成功运行了代码(唯一需要更改的是反斜杠 - 使用 C:\\Users\\amusaeva\\PyCharmProjects\\ARW\\WorkforceModel)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接