python - SQL Server 2017 中的 pyodbc 连接
问题描述
这是我在stackoverflow上的第一篇文章,所以如果我做错了什么,请多多包涵。
我目前正在尝试实现一个 Python 脚本,它从 CSV 文件中读取数据,将其转换为 JSON 对象并将其存储在 SQL Server 表中。如果我直接在 Python 中执行此操作,一切都会正常工作,我有一个完全正常工作的 Python 脚本,它读取 CSV 并通过pyodbc
SQL Server 存储数据。
不幸的是,当我尝试在其中使用类似的脚本时,sp_execute_external_script
我收到无法建立连接的错误。
我的 T-SQL 代码:
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,状态 20,Zeile 2 Unerwarteter “Python”-Skriptfehler beim Ausführen von “sp_execute_external_script”mit HRESULT 0x80004004。Meldung 39019,Ebene 16,状态 2,Zeile 2 Externer Skriptfehler:
执行错误。检查输出以获取更多信息。回溯(最后一次调用):文件“”,第 5 行,在文件“E:\Program Files\Microsoft SQL Server\MSSQL14.CWDEV\MSSQL\ExtensibilityData\CWDEV01\6F73A5E0-4F82-4FEA-A5DA-7A8E7D8778D2\sqlindb. py",第 53 行,在转换 cnxn = pyodbc.connect(conn_str) pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]Named Pipes-Anbieter: Es konnte keine Verbindung zu SQL Server hergestellt werden [1326]。(1326) (SQLDriverConnect)')
SqlSatelliteCall 错误:执行错误。检查输出以获取更多信息。STDOUT-Meldung(en) aus dem externen Skript: SqlSatelliteCall 函数失败。请参阅控制台输出以获取更多信息。回溯(最后一次调用):文件“E:\Program Files\Microsoft SQL Server\MSSQL14.CWDEV\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py”,第 406 行,在 rx_sql_satellite_call rx_native_call("SqlSatelliteCall ", params) 文件 "E:\Program Files\Microsoft SQL Server\MSSQL14.CWDEV\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py",第 291 行,在 rx_native_call ret = px_call(functionname, params) RuntimeError: revoscalepy 函数失败。
目前我只是试图建立与目标服务器的连接。顺便说一句,代码没有在目标服务器上运行,它将在不同的服务器上执行。我的想法是sp_execute_external_script
在特定 SQL Server 上使用 Python 将数据从平面文件中迁移出来,并将其存储在不同的目标 SQL Server 上。
任何建议将不胜感激。
非常感谢
解决方案
我想到了。
Windows 防火墙中有一条传出规则,它阻止了 pyodbc 连接的网络访问。
禁用它后,一切都像魅力一样工作。
机器学习服务的防火墙规则如下所述:
问候,
推荐阅读
- java - 我需要使用增加或减少项目数量的选项来执行添加到购物车功能
- java - 有多个 ID 值时解析 JSONObject 以访问 ID(Java)
- azure-storage - 将 WEBSITE_CONTENTAZUREFILECONNECTIONSTRING 设置为防火墙后的存储时,具有 VNet 集成的函数应用程序部署失败
- java - 如何更改 appwidget 上的 TextView 文本颜色?
- c# - 并行运行时 IronPDF 死锁
- javascript - 检查JQUERY中的同一个文件夹中是否存在1个或多个同名但扩展名不同的文件
- android - 在 android 中是否可以在没有 MSAL 或 ADAL 的情况下对启用了 Intune sdk 的应用程序进行身份验证?
- php - PHP PDO lastInsertId() 插入表后返回 0,没有错误或警告
- asp.net-core - 多次调用 DynamicRouteValueTransformer.TransformAsync
- machine-learning - 在这种 KNN 分类器的情况下,我应该选择 k = 3 吗?