使用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
相关产品推荐
相关产品推荐

