簡體   English   中英

在 Jupyter 中使用 pyodbc 連接到 SQL 服務器時連接字符串中的雙反斜杠

[英]Double backslash in connection string when connecting to SQL Server with pyodbc in Jupyter

背景:

我正在運行 Windows 10 Enterprise,使用 Jupyter Notebook 通過 Pyodbc 連接到 SQL 服務器實例

我能夠通過trusted_connection=yes成功連接

其中server = '.\SQLEXPRESS' (我的本地實例)

con_string = f'DRIVER={driver};SERVER={server};DATABASE={db};trusted_connection=yes;'

但是,當我嘗試傳遞連接到生產/測試服務器時需要的憑據時,我收到一條錯誤消息,提示我的用戶名無效。

where server = '.\SQLEXPRESS' (我的本地實例)(應該仍然可以使用 creds)

`username = '<domain>\<user>'`

con_string = `f'DRIVER={driver};SERVER={server};DATABASE{db};UID={username};PWD={password}'

這是問題出現的地方:我按如下方式啟動用戶名,以轉義反斜杠:

username='domain\\user'

如果我運行print(username) ,我會按預期獲得'domain\user'

但是,當我運行與以前相同的連接字符串時,這次使用用戶名和密碼,我從 pyodbc 收到一條錯誤消息,內容如下:

“域\用戶”不存在。

為什么 SQL 服務器將變量username視為包含'domain\\user'而不是我期望的'domain\user'

我已經嘗試了所有我能想到的方法來在其中添加一個反斜杠,但似乎沒有任何效果。 從將值作為環境變量加載到“原始”字符串、替換等

有趣的是,每當我沒有打印就得到 output 作為username時,我得到'domain\\user'

更令人困惑的是,為什么 SQL 服務器沒有為server回退錯誤,我什至沒有 escaping 那里的反斜杠,我只是傳入 '.\SQLEXPRESS'

我很欣賞對這個問題的任何見解。

在此連接字符串中:

con_string = f'DRIVER={driver};SERVER={server};DATABASE{db};UID={username};PWD={password}'

UID 是 SQL 授權登錄或數據庫用戶。 不是 Windows 用戶。 要使用 Windows/AD 身份,您必須使用trusted_connection=yes 並以目標用戶身份運行該程序或安裝憑據以在 NTLM 身份驗證中使用該用戶的憑據。 或者使用runasrunas .netonly運行你的程序。

暫無
暫無

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

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