在 Jupyter 中使用 pyodbc 连接到 SQL 服务器时连接字符串中的双反斜杠

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

背景:

我是 运行ning Windows 10 Enterprise,使用 Jupyter Notebook 连接到 SQL 使用 Pyodbc 的服务器实例

我能够成功连接 trusted_connection=yes

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

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

但是,当我尝试传递连接到 Prod/Test 服务器时需要的凭据时,我收到一条错误消息,提示我的用户名无效。

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 收到一条错误消息,内容为:

'domain\user' does not exist.

为什么 SQL 服务器将变量 username 视为包含 'domain\user' 而不是我期望的 'domain\user'

我已经尝试了所有我能想到的方法来在其中添加一个反斜杠,但似乎没有任何效果。从将值作为环境变量加载到 "raw" 字符串、替换等

有趣的是,每当我只得到 username 的输出而没有打印时,我得到 'domain\user'

更令人困惑的是,为什么 SQL 服务器没有为 server 返回错误,我什至没有转义那里的反斜杠,我只是传入 '.\SQL快递'

非常感谢对此问题的任何见解。

在此连接字符串中:

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

UID 是 SQL 授权登录或数据库用户。不是 Windows 用户。要使用 Windows/AD 身份,您必须使用 trusted_connection=yes。并且 运行 程序作为目标用户或安装凭据以在 NTLM 身份验证中使用该用户的凭据。或者 运行 您的程序 runasrunas /netonly.