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

使用pyodbc参数连接成功但连接字符串连接失败的问题排查

问题排查:pyodbc参数连接SQL Server成功,拼接连接字符串失败

问题现象

  • 用参数方式调用pyodbc.connect()可正常连接SQL Server
  • 用拼接字符串方式调用时触发连接错误,错误信息:
Traceback (most recent call last):
  File "/home/tmhedr3/test_sql.py", line 26, in <module>
    cnxn = pyodbc.connect(
       ^^^^^^^^^^^^^^^
pyodbc.OperationalError: ('08001', '[08001] [FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

代码对比

可成功运行的代码

driver='{FreeTDS}'
server = 'HHVDBHDSAP10'
database = 'MOAR_OMOP_CDM'
uid='domain\\uid'
pwrd=getpass.getpass(prompt='Password: ')
TDSV='8.0'
port='1433'
cnxn = pyodbc.connect(Driver=driver, Server=server, Database=database, Trusted_Connection='no',
                      UID=uid, PWD=pwrd, TDS_Version=TDSV, Port=port)

无法运行的代码

cnxn = pyodbc.connect(
        "DRIVER="+driver+
        ";SERVER="+server+
        ";DATABASE="+database+
        ";Trusted_Connection='no'"+
        ";UID="+uid+
        ";PWD="+pwrd+
        ";TDS_Version="+TDSV+
        ";PORT="+port
        )

问题原因及解决方案

1. 多余单引号引发参数解析错误

拼接字符串里的Trusted_Connection='no'多了单引号。连接字符串格式中,参数值不需要用单引号包裹,而pyodbc的参数模式会自动处理参数格式,不会添加多余引号。

修改方式:去掉'no'的单引号,改为Trusted_Connection=no

2. 可选优化:用f-string避免拼接错误

直接拼接字符串容易出现格式问题,推荐用Python的f-string写法,更简洁且不易出错:

conn_str = f"DRIVER={driver};SERVER={server};DATABASE={database};Trusted_Connection=no;UID={uid};PWD={pwrd};TDS_Version={TDSV};PORT={port}"
cnxn = pyodbc.connect(conn_str)

内容的提问来源于stack exchange,提问作者reas0n

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:16:09