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

使用Polars和connectorx连接SSMS与Python时遇超时错误求助

排查ConnectorX连接SQL Server超时问题

问题背景

尝试通过ConnectorX连接SQL Server(对应SSMS管理的数据库),已使用urllib.parse.quote_plus处理含特殊字符的密码和服务器名,但执行查询30秒后触发超时错误。

用户代码

import connectorx as cx 
import urllib.parse

conn = 'mssql://sa:{}@{}:5432/Planning_insight?encrypt=true&trusted_connection=true'.format(
    urllib.parse.quote_plus('MYPASSWORD'),
    urllib.parse.quote_plus('MYSERVER\SQLEXPRESS')
    )                                                                         
str_query = f"SELECT * FROM raw.calendar"

cx.read_sql(conn,str_query)

错误信息

RuntimeError                              Traceback (most recent call last)
Cell In[1], line 10
4 conn = 'mssql://sa:{}@{}:5432/Planning_insight?encrypt=true&trusted_connection=true'.format(
5     urllib.parse.quote_plus('MYPASSWORD'),
6     urllib.parse.quote_plus('MYSERVER\SQLEXPRESS')
7     )
8 str_query = f"SELECT * FROM raw.calendar"
---> 10 cx.read_sql(conn,str_query)

File c:\Users\lorenzsc\AppData\Local\miniconda3\envs\padp2\lib\site-packages\connectorx\__init__.py:224, in read_sql(conn, query, return_type, protocol, partition_on, partition_range, partition_num, index_col)
221 except ModuleNotFoundError:
222     raise ValueError("You need to install pandas first")
---> 224 result = _read_sql(
225     conn,
226     "pandas",
227     queries=queries,
228     protocol=protocol,
229     partition_query=partition_query,
230 )
231 df = reconstruct_pandas(result)
233 if index_col is not None:

RuntimeError: Timed out in bb8

排查与解决方案

1. 修正数据库端口(最可能的根因)

SQL Server默认端口是1433,当前使用的5432是PostgreSQL的默认端口,这会导致无法连接到SQL Server实例。修改连接字符串中的端口:

conn = 'mssql://sa:{}@{}:1433/Planning_insight?encrypt=true&trusted_connection=true'.format(
    urllib.parse.quote_plus('MYPASSWORD'),
    urllib.parse.quote_plus(r'MYSERVER\SQLEXPRESS')  # 用原始字符串避免转义问题
)

2. 修复服务器名的转义问题

Python字符串中的\是转义字符,直接写MYSERVER\SQLEXPRESS可能导致解析异常,改用原始字符串(前缀r)或者将\改为\\:

# 方式1:原始字符串
urllib.parse.quote_plus(r'MYSERVER\SQLEXPRESS')
# 方式2:转义反斜杠
urllib.parse.quote_plus('MYSERVER\\SQLEXPRESS')

3. 调整加密与信任连接参数

同时设置encrypt=true和trusted_connection=true可能引发证书验证超时,针对SQL Server Express的自签名证书,可添加trust_server_certificate=true参数,或关闭加密(仅本地测试时建议):

# 带证书信任的连接字符串
conn = 'mssql://sa:{}@{}:1433/Planning_insight?encrypt=true&trusted_connection=true&trust_server_certificate=true'.format(
    urllib.parse.quote_plus('MYPASSWORD'),
    urllib.parse.quote_plus(r'MYSERVER\SQLEXPRESS')
)

4. 测试基础网络连通性

用PowerShell验证服务器端口是否可达:

Test-NetConnection MYSERVER -Port 1433

如果连接失败,需检查SQL Server的TCP/IP协议是否启用(在SQL Server Configuration Manager中配置),以及防火墙是否允许1433端口通信。

5. 增加超时时间

在连接字符串中添加timeout参数延长超时时间(单位:秒):

conn = 'mssql://sa:{}@{}:1433/Planning_insight?encrypt=true&trusted_connection=true&trust_server_certificate=true&timeout=60'.format(
    urllib.parse.quote_plus('MYPASSWORD'),
    urllib.parse.quote_plus(r'MYSERVER\SQLEXPRESS')
)

6. 验证SQL Server配置

  • 确保SQL Server启用混合认证模式(Windows+SQL Server认证),且sa账户已启用、密码正确。
  • 在SQL Server Configuration Manager中,确认SQL Server Network Configuration下的TCP/IP协议已启用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:23:12