我尝试通过类似波纹管的Python代码连接到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.InterfaceError :(“ 28000”,“ [28000] [Microsoft] [ODBC驱动程序17 for SQL Server] [SQL Server]用户“ myuserid”的登录失败。 (18456) (SQLDriverConnect)“)
我尝试从连接字符串中的服务器定义中删除端口号。我也尝试了不带选项Encrypt和TrustServerCertificate。一直显示相同的错误。
我尝试使用Management Studio使用相同的凭据进行连接,并且有效。
您能指定我在做什么错吗?
答案 0 :(得分:1)
好的,所以我设法找出问题所在。
我的密码包含一些无法正确转义的值。
首先,如果连接字符串选项的值包含“;”应该用大括号将其转义。
所以我需要替换:
"pwd={pwd};".format(pwd='secretpswd')
-字符串pwd=secretpswd
与
"pwd={{{pwd}}};".format(pwd='secretpswd')
-字符串pwd={secretpswd}
此外,如果密码包含大括号,则应该将其括起来。可以像
pwd = 'password_with_curly_braces_{}'
pwd = pwd.replace('}', '}}').replace('{', '{{')