You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:35:36