簡體   English   中英

SQL Server 2017 中的 pyodbc 連接

[英]pyodbc connection within SQL Server 2017

這是我在 stackoverflow 上的第一篇文章,所以如果我做錯了什么,請多多包涵。

我目前正在嘗試實現一個 Python 腳本,該腳本從 CSV 文件讀取數據,將其轉換為 JSON 對象並將其存儲在 SQL Server 表中。 如果我直接在 Python 中執行此操作,一切正常,我有一個完整的 Python 腳本,它讀取 CSV 並通過 SQL Server 上的pyodbc存儲數據。

不幸的是,當我嘗試在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", line 53, in transform 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("SqlSatellite_call("SqlSatellite_Call) ", 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) 運行時錯誤: revoscalepy 功能失敗。

目前我只是想連接到目標服務器。 順便說一句,代碼不在目標服務器上運行,它將在不同的服務器上執行。 我的想法是在特定 SQL Server 上使用sp_execute_external_script和 Python 將數據從平面文件中遷移出來,並將其存儲在不同的目標 SQL Server 上。

任何建議將不勝感激。

非常感謝

我想到了。

Windows 防火牆中有一個傳出規則,它阻止了 pyodbc 連接的網絡訪問。

防火牆傳出規則

禁用它后,一切都像一個魅力。

此處描述了機器學習服務的防火牆規則:

https://docs.microsoft.com/de-de/sql/machine-learning/security/firewall-configuration?view=sql-server-2016

問候,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM