如何使用pyodbc连接含转义字符密码的MS SQL Server
解决pyodbc连接SQL Server时含反斜杠密码的登录问题
以下几种方案可以解决密码中包含反斜杠导致的登录失败问题:
1. 使用Python原始字符串定义密码
Python的原始字符串(前缀r)会忽略转义逻辑,直接保留字符串中的所有字符,包括反斜杠。如果你的密码包含两个反斜杠,直接用原始字符串声明即可:
import pyodbc server = "你的服务器地址" database = "目标数据库名" username = "用户名" password = r"包含\\的密码" # 这里的两个反斜杠会被直接传递给ODBC驱动 # 拼接连接字符串 conn_str = ( f"DRIVER={{ODBC Driver 17 for SQL Server}};" f"SERVER={server};" f"DATABASE={database};" f"UID={username};" f"PWD={password}" ) conn = pyodbc.connect(conn_str)
2. 手动双重转义反斜杠
如果不想用原始字符串,需要将密码中的每个反斜杠写成两个反斜杠(因为Python字符串中两个反斜杠会被解析为一个实际的反斜杠)。如果密码本身有两个反斜杠,就需要写成四个:
password = "包含\\\\的密码" # 四个反斜杠最终会被解析为两个实际的反斜杠传递给驱动
3. 使用关键字参数直接连接
pyodbc的connect方法支持直接传入关键字参数,跳过字符串拼接环节,驱动会自动处理特殊字符,这是最稳妥的方式:
import pyodbc conn = pyodbc.connect( driver="{ODBC Driver 17 for SQL Server}", server="你的服务器地址", database="目标数据库名", uid="用户名", pwd=r"包含\\的密码" # 这里也可以用原始字符串或双重转义的普通字符串 )
额外注意事项
- 确保使用的ODBC驱动是最新版本(推荐ODBC Driver 17或18 for SQL Server),旧版本对特殊字符的处理可能存在兼容问题。
- 测试时可以临时打印连接字符串(注意不要泄露真实密码),确认反斜杠的数量是否符合预期。
内容的提问来源于stack exchange,提问作者KSS
相关产品推荐
相关产品推荐

