繁体   English   中英

连接到SQL Server会抛出pyodbc.InterfaceError

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM