python - SQL Server 中的 Python 脚本 / sp_execute_external_script / pyodbc 错误
问题描述
我需要在 SQL Server 中使用 Python 脚本构建模型。但它需要有多个输入数据集。我猜你只能拥有一个。我读到一种方法是在 sp_execute_external_script 中使用 pyodbc。
但它不会连接。完全相同的代码在 Spyder 中确实有效,因此这不是一般的配置问题(我也可以从 Tableau 等连接)。因为它是本地实例,所以我尝试使用点 (.) 作为服务器名称,但这不起作用,所以我也尝试将服务器和实例名称完整地放入(因此下面有两个不同的连接字符串)。
编码:
EXEC sp_execute_external_script
@language =N'Python',
@script=N'
import pyodbc
sql_conn = pyodbc.connect("DRIVER={ODBC Driver 17 for SQL Server};SERVER=XXX\YYY;DATABASE=MY_PYTHON;trusted_connection=Yes")
sql_conn = pyodbc.connect("Driver={ODBC Driver 17 for SQL Server};Server=.;Database=MY_PYTHON;Trusted_Connection=Yes;")
'
错误信息:
消息 39004,级别 16,状态 20,第 52 行在
执行“sp_execute_external_script”期间发生“Python”脚本错误,HRESULT 为 0x80004004。消息 39019,级别 16,状态 2,第 52 行
发生外部脚本错误:执行错误。检查输出以获取更多信息。回溯(最后一次调用):
文件“”,第 5 行,在
文件“C:\ProgramData\GTMDEV\Temp-PY\Appcontainer1\A0F0D72C-4B70-46BD-8307-D51C36E9A8F1\sqlindb_0.py”,第 39 行,在transform
sql_conn = pyodbc.connect("Driver={ODBC Driver 17 for SQL Server};Server=.;Database=MY_PYTHON;Trusted_Connection=Yes;")消息 39019,级别 16,状态 2,第 52 行
出现外部脚本错误:
pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]Named Pipes Provider: 无法打开连接到 SQL Server [2]. (2) (SQLDriverConnect); [08001] [Microsoft][ODBC Driver 17 for SQL Server]登录超时已过期 (0); [08001] [Microsoft][ODBC Driver 17 for SQL Server]A建立与 SQL Server 的连接时发生网络相关或特定于实例的错误。找不到或无法访问服务器。请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 书籍在线。(2)')SqlSatelliteCall 错误:执行错误。检查输出以获取更多信息。
来自外部脚本的 STDOUT 消息:
SqlSatelliteCall 函数失败。请参阅控制台输出以获取更多信息。
回溯(最后一次调用):
文件“C:\Program Files\Microsoft SQL Server\MSSQL15.GTMDEV\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.GTMDEV\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py",第 375 行,在 rx_native_call
ret = px_call(functionname, params) RuntimeError: revoscalepy 函数失败。
Internet 研究使我在 SQL Server 中为 SQLRUserGroupYYY 创建了一个登录名,并将其添加到本地安全策略中的“允许本地登录”中。但这并没有改变任何事情。而且我找不到其他任何有效的方法。
如果相关,服务器在我的 PC 上,它的名称是 MYPCNAME\MYNAMEDINSTANCE。(并且名称是正确的并且它正在运行(在错误消息中建议),因为连接在 Spyder、Tableau 等中有效)。
有什么想法我还能尝试吗?
谢谢。
作为参考,这是建议该方法的文章之一:
给出的示例是针对 R 的,但原理应该与 Python 相同。我确实在 R 中尝试过,并得到了相同的错误消息。
这是另一篇具有相同问题的帖子(包含 SQLRUserGroup 登录建议的链接):
解决方案
推荐阅读
- php - Sphinx - 将 OR 运算符与字段开始/结束修饰符组合
- assembly - Shellcode 开发 - 使用 64 位的 NASM 程序集生成一个 shell [错误]
- multilingual - 多语言网站的 Sitecore 分支模板
- javascript - 在以下代码中无法理解 FizzBuzz 的最后条件
- r - 使用 surv.ranger 进行参数调整时出错
- html - 如何使用css3并排放置两个div
- spring-boot - 春季安全| 安全配置 permitall 不起作用
- leaflet - 无法用leafletjs 可视化我的geojson 数据
- java - 没有特定原因的 Android / google ANR 崩溃
- java - 我应该在 Java8 中使用什么版本的 JasperReport