AWS Lambda中PyODBC连接SQL Server的反斜杠转义问题
解决AWS Lambda连接SQL Server的域用户名转义问题
问题核心原因
你遇到的登录失败,本质是Python普通字符串中的\s被解析为空格转义符,导致实际传递给SQL Server的用户名变成了COMPT svcacct_clientloc(反斜杠+ s被替换成空格),而非预期的COMPT\svcacct_clientloc。错误信息里的四个反斜杠是JSON序列化时的二次转义,并非实际传递的内容。
三种可行解决方案
方案1:使用原始字符串(推荐)
在字符串前加r,Python会忽略所有转义序列,直接保留原始字符:
import os import json import pyodbc def lambda_handler(event, context): # 原始字符串保留反斜杠不转义 connection_string = r'DRIVER={ODBC Driver 17 for SQL Server};SERVER=1.10.143.76;PORT=1433;DATABASE=MyDB;UID=COMPT\svcacct_clientloc;PWD=MyPassword;' print(connection_string) connection = pyodbc.connect(connection_string) cursor = connection.cursor() # 后续数据库操作
方案2:手动双反斜杠转义
用两个反斜杠代表一个实际的反斜杠,避免被Python解析为转义符:
connection_string = 'DRIVER={ODBC Driver 17 for SQL Server};SERVER=1.10.143.76;PORT=1433;DATABASE=MyDB;UID=COMPT\\svcacct_clientloc;PWD=MyPassword;'
方案3:从Lambda环境变量读取(更安全)
将用户名和密码存入Lambda环境变量(避免硬编码),环境变量中直接填写COMPT\svcacct_clientloc即可,无需转义:
import os import pyodbc def lambda_handler(event, context): # 从环境变量读取敏感信息 db_uid = os.environ.get('DB_UID') db_pwd = os.environ.get('DB_PWD') connection_string = f'DRIVER={{ODBC Driver 17 for SQL Server}};SERVER=1.10.143.76;PORT=1433;DATABASE=MyDB;UID={db_uid};PWD={db_pwd};' connection = pyodbc.connect(connection_string) cursor = connection.cursor()
验证方法
修改代码后打印connection_string,确认输出中用户名是COMPT\svcacct_clientloc,而非带空格的COMPT svcacct_clientloc,即可解决登录失败问题。
内容的提问来源于stack exchange,提问作者Happy Coder
相关产品推荐
相关产品推荐

