在Jupyter中使用pyodbc连接到SQL服务器时,连接字符串中出现了双反斜杠。

问题描述 投票:0回答:1

背景:我正在运行Windows 10 Enterprise,使用Jupyter Notebook与SQL Server实例进行连接。

我正在运行Windows 10 Enterprise,使用Jupyter Notebook与Pyodbc连接到SQL Server实例。

我可以成功连接到 trusted_connection=yes

哪儿 server = '.\SQLEXPRESS' (我本地的例子)

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

然而,当我试图传入凭证时,我将需要连接到ProdTest服务器,我得到一个错误,我的用户名是无效的。

其中 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'不存在。

'domain/user'不存在。

为什么SQL Server将变量 username 含有 'domain\\user' 而非 'domain\user' 我所期待的。

我已经尝试了所有我能想到的方法来获得一个反斜杠,但似乎都没有用。从将值作为环境变量加载到 "原始 "字符串中,到替换,等等

有趣的是,每当我只得到 username 也就是没有打印,我得到的是 'domain\\user'

更让人困惑的是,为什么SQL Server不回传错误的 server我连反斜杠都没有转义,我只是简单地传递'.\SQLEXPRESS'。

我很感激对这个问题的任何见解。

python sql-server string pyodbc
1个回答
1
投票

在这个连接字符串中。

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

UID是一个SQL Auth登录或数据库用户。 不是Windows用户。 要使用WindowsAD身份,你必须使用 trusted_connection=yes. 并以目标用户的身份运行程序,或者安装一个凭证,在NTLM认证中使用该用户的凭证。 或者在运行程序时使用 runasrunas /netonly.

© www.soinside.com 2019 - 2024. All rights reserved.