在Jupyter中使用pyodbc连接到SQLServer时连接字符串中的双反斜线

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

我在SO上看到与此类似的问题,但似乎没有一个解决我的特定用例的问题。

背景:

我正在运行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;'

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

其中server = '.\SQLEXPRESS'(我的本地实例)(仍然可以使用信用)

username = '<domain>\<user>'

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

这里是出现问题的地方:

我正在按照以下步骤启动用户名,以逃避反斜杠:

username='domain\\user

如果我运行打印(用户名),我得到:

'domain\user'如预期

但是,当我运行与以前相同的连接字符串时,这次使用用户名和密码,我从pyodbc收到一条错误消息,内容为:

'domain\\user'不存在。

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

我已经尽力想尽一切办法在其中添加一个反斜杠,似乎没有任何效果。从将值作为环境变量加载到“原始”字符串,替换等

有趣的是,只要我不打印就得到username的输出,我就会得到'domain\\user'

更令人困惑的是,为什么SQL Server不会为server踢回错误,我什至没有在其中转义反斜杠,我只是在传递'。\ SQLEXPRESS'

我非常感谢您对此问题的见解。

任何人都知道python在这里发生什么吗?

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

在此连接字符串中:

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

UID是SQL Auth登录名或数据库用户。不是Windows用户。要使用Windows / AD身份,必须使用trusted_connection=yes。并以目标用户身份运行该程序,或安装凭据以在NTLM身份验证中使用该用户的凭据。通过使用runasrunas /netonly进行EG。

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