![](/img/trans.png)
[英]Logon failed (pyodbc.InterfaceError) ('28000', "[28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'xxxx'
[英]Connecting to SQL Server throws pyodbc.InterfaceError
我尝试从像Python这样的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] [SQL Server的ODBC驱动程序17] [SQL Server]用户'myuserid'登录失败。(18456)(SQLDriverConnect)”)
我尝试从连接字符串中的服务器定义中删除端口号。 我也试过没有选项Encrypt和TrustServerCertificate。 它一直显示相同的错误。
我尝试使用Management Studio连接相同的凭据,但它确实有效。
你能指出我做错了什么吗?
好的,我设法找出了什么问题。
我的密码包含一些未正确转义的值。
首先,如果连接字符串选项的值包含';' 它应该用花括号逃脱。
所以我需要更换:
"pwd={pwd};".format(pwd='secretpswd')
pwd=secretpswd
with
"pwd={{{pwd}}};".format(pwd='secretpswd')
- string pwd={secretpswd}
此外,如果密码包含任何花括号,它应该加倍。 可以这样做
pwd = 'password_with_curly_braces_{}'
pwd = pwd.replace('}', '}}').replace('{', '{{')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.