这是我关于堆叠溢出的第一篇文章,所以如果我做错了什么,请容忍我。
我目前正在尝试实现一个Python脚本,它从CSV文件中读取数据,将其转换为JSON对象,并将其存储在Server表中。如果我在Python中直接这样做,一切都很好,我有一个完全工作的Python脚本,它读取CSV并通过pyodbc将数据存储在Server上。
不幸的是,当我试图在sp_execute_external_script中使用类似的脚本时,我会得到一个错误,无法建立连接。
我的代码:
DECLARE @Python as nvarchar(max)
SET @Python = N'
import pyodbc
import datetime as datetime
conn_str = (
r''DRIVER={ODBC Driver 17 for SQL Server};''
r''SERVER=xxx.xxx.xxx.xxx;''
r''DATABASE=xxxx;''
r''UID=xxxxxx;''
r''PWD=xxxx;''
)
cnxn = pyodbc.connect(conn_str)
'
EXEC sp_execute_external_script
@language = N'Python',
@script = @Python ,
@input_data_1 = N'',
@input_data_1_name = N''错误消息
Meldung 39004,Ebene 16,Status 20,Zeile 2 Unerwarteter "Python"-Skriptfehler beim Ausführen von "sp_execute_external_script“mit HRESULT 0x80004004。Meldung 39019,Ebene 16,Status 2,Zeile 2 Externer Skriptfehler: 在执行中出错。有关更多信息,请查看输出。追溯(最近一次调用):文件"",第5行,在文件"E:\Program \Microsoft SQL Server\MSSQL14.CWDEV\MSSQL\ExtensibilityData\CWDEV01\6F73A5E0-4F82-4FEA-A5DA-7A8E7D8778D2\sqlindb.py",第53行“中,在转换cnxn = pyodbc.connect(conn_str) pyodbc.Error:('08001','08001ODBC驱动程序17用于SQL ServerNamed管道-Anbieter: Es konnte keine Verbindung zu hergestellt werden 1326。(1326) (SQLDriverConnect)') SqlSatelliteCall错误:执行中的错误。有关更多信息,请查看输出。STDOUT(En) aus外部性SqlSatelliteCall函数失败.有关更多信息,请参见控制台输出。回溯(最近一次调用):文件"E:\Program \Microsoft Server\MSSQL14.CWDEV\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py",行406,在rx_sql_satellite_call rx_native_call("SqlSatelliteCall",params)文件"E:\Program \Microsoft Server\MSSQL14.CWDEV\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py",第291行中,rx_native_call ret = px_call(functionname,params) RuntimeError: revoscalepy函数失败。
目前,我只是尝试连接到目标服务器。顺便说一句,代码不在目标服务器上运行,它将在另一台服务器上执行。我的想法是在特定的Server上使用sp_execute_external_script与Python一起迁移平面文件中的数据,并将其存储在不同的目标SQL服务器上。
任何建议都将受到高度赞赏。
非常感谢
发布于 2020-11-10 09:18:44
我想通了。
windows防火墙中有一个传出规则,它阻止pyodbc连接的网络访问。
在禁用它之后,一切都像魔法一样运转。
这里描述了机器学习服务的防火墙规则:
致以敬意,
https://stackoverflow.com/questions/64754957
复制相似问题