我尝试从Python代码(如bellow)连接到Azure云上的MS-SQL数据库。

import pyodbc
connect_str = "Driver={ODBC Driver 17 for SQL Server};" + \
    "Server={server},1433;".format(server='tcp:ipaddress.database.windows.net') + \
    "Database={database};".format(database='mydb') + \
    "uid={uid};".format(uid='myuserid') + \
    "pwd={pwd};".format(pwd='secretpswd') + \
    "Encrypt=yes;TrustServerCertificate=no;"
cnxn = pyodbc.connect(connect_str)

我得到错误:
pyodbc.interface错误:('28000',“[28000][Microsoft][ODBC驱动程序17
对于SQL Server][SQL Server],用户“myuserid”的登录失败。(18456年)
(SQLDriverConnect)“)
我试图从连接字符串中的服务器定义中删除端口号。另外,我尝试了不带选项Encrypt和TrustServerCertificate。一直显示相同的错误。
我尝试使用Management Studio连接相同的凭据,结果成功了。
你能说明我做错了什么吗?

最佳答案

好吧,所以我设法找出了问题所在。
我的密码包含一些未正确转义的值。
首先,如果连接字符串选项的值包含“;”,则应使用大括号对其进行转义。
所以我需要替换:
"pwd={pwd};".format(pwd='secretpswd')-字符串pwd=secretpswd
具有
"pwd={{{pwd}}};".format(pwd='secretpswd')-字符串pwd={secretpswd}
此外,如果密码包含任何大括号,它应该加倍。可以这样做

pwd = 'password_with_curly_braces_{}'
pwd = pwd.replace('}', '}}').replace('{', '{{')

关于python - 连接到SQL Server会引发pyodbc.InterfaceError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55651021/

10-12 21:17