SQL Server python机器学习无法访问文件系统

时间:2019-06-15 15:36:51

标签: python sql-server

SQL Server 2017,使用sp_execute_external_script(SQL Server机器学习)在数据库的上下文中运行python脚本。 python脚本需要从文件系统加载文件。一切(数据库和文件系统)都在我的PC上本地。错误跟踪:

Msg 39004,Niveau 16,État20,Ligne 1

Ur erreur de script«Python»执行产品«sp_execute_external_script»avec HRESULT 0x80004004。

Msg 39019,Niveau 16,État2,Ligne 1

最好的脚本产品:

执行错误。检查输出以获取更多信息。

回溯(最近通话最近一次):

文件“”,第

行第5行

第43行的文件“ C:\ PROGRA〜1 \ MICROS〜3 \ MSSQL1〜2.MSS \ MSSQL \ EXTENS〜1 \ MSSQLSERVER201701 \ B2E71FC7-8E08-4D86-8B82-38AD564DBC9D \ sqlindb.py”

im = Image.open(adresse_image)

文件“ C:\ Program Files \ Microsoft SQL Server \ MSSQL14.MSSQLSERVER2017 \ PYTHON_SERVICES \ lib \ site-packages \ PIL \ Image.py”,行2410,处于打开状态

fp = builtins.open(filename, "rb")

PermissionError:[Errno 13]权限被拒绝:'C:\ Users \ aubertl \ Downloads \ plage_corse_2.jpg'

SqlSatelliteCall错误:执行错误。检查输出以获取更多信息。

标准脚本出没的STDOUT消息:

Express Edition将继续执行。

SqlSatelliteCall函数失败。请查看控制台输出以获取更多信息。

回溯(最近通话最近一次):

rx_sql_satellite_call中的第406行“ C:\ Program Files \ Microsoft SQL Server \ MSSQL14.MSSQLSERVER2017 \ PYTHON_SERVICES \ lib \ site-packages \ revoscalepy \ computecontext \ RxInSqlServer.py”,行406。

rx_native_call("SqlSatelliteCall", params)

rx_native_call中的第291行“ C:\ Program Files \ Microsoft SQL Server \ MSSQL14.MSSQLSERVER2017 \ PYTHON_SERVICES \ lib \ site-packages \ revoscalepy \ RxSerializable.py”

ret = px_call(functionname, params)

RuntimeError:revoscalepy函数失败。

3 个答案:

答案 0 :(得分:2)

来自Grant all application packages permissions on file folder

选项1:互动式

  • 启动Windows资源管理器,然后右键单击目标文件文件夹。
  • 从上下文菜单中,选择Properties
  • 切换到Security标签。
  • 单击Edit按钮。
  • 单击Add...以添加ALL APPLICATION PACKAGES特权。
  • 勾选Modify和/或Full Control,以允许Read/Write进入此目录。

还可以添加Everyone以防止出现其他问题。

选项2:命令行

改编自StackOverflow answer,在Administator命令提示符下运行:

icacls "X:\DataDir" /grant "ALL APPLICATION PACKAGES:(OI)(CI)F" /T

答案 1 :(得分:1)

默认情况下,python服务在“ NT Service \ MSSQLLaunchpad”下运行。文件位于“ C:\ Users \ aubertl”文件夹中,默认情况下,MSSQLLaunchpad无法访问该文件夹。
我建议创建另一个目录,例如C:\ PytrhonScripts“,并将对该文件夹的读取访问权限授予MSSQLLaunchpad。

答案 2 :(得分:0)

右键单击目录->授予访问权限->添加“所有人”。然后脚本运行并产生所需的输出。显然不能添加使用该服务运行的用户(NT Service \ MSSQLLaunchpad),因此这是一种解决方法。