含@符号的SQL Server登录名致ODBC连接失败,求解决方案
解决含@符号的SQL Server ODBC登录问题
错误详情
错误代码:HY000
错误信息:
[HY000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无法打开登录请求的服务器"dominio",登录失败。
问题原因
ODBC驱动解析连接字符串时,会把@符号默认当作登录名与服务器名称的分隔符,导致它误将user123@dom.com.br中@后的内容识别为目标服务器名称,从而引发登录失败。
解决方案
修改连接字符串中的UID参数,用双引号包裹带@的登录名,或者直接移除不必要的花括号,避免驱动错误解析:
修正后的完整代码
parametros = ( 'DRIVER={ODBC Driver 17 for SQL Server};' 'SERVER=localhost;' 'PORT=1433;' 'DATABASE=database;' r'UID="user123@dom.com.br";' 'PWD=123456' ) try: conexao = pyodbc.connect(parametros) print("连接成功") except Exception as e: print(f"连接失败:{str(e)}") else: cursor = conexao.cursor() # 这里可添加后续数据库操作
额外提示
- 原代码仅捕获
TypeError范围过窄,改成捕获通用Exception能覆盖所有连接相关错误,便于排查问题。 - 若使用Azure AD认证,可尝试在连接字符串中添加
Authentication=ActiveDirectoryPassword参数(仅适用于特定认证场景)。
内容的提问来源于stack exchange,提问作者Marconi's tech
相关产品推荐
相关产品推荐

