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

使用SQLAlchemy与Pandas查询SQL Server时如何设置查询超时?

解决SQLAlchemy+Pandas查询MS SQL Server的超时设置问题

你的代码未配置查询超时参数,所以15秒的SQL语句会完整执行。以下是两种有效的超时设置方法:

方法一:创建引擎时通过connect_args指定查询超时

直接在create_engine中传递query_timeout参数(单位:秒),该参数会传递给底层pyodbc连接:

import datetime
import pandas as pd
import sqlalchemy

connection_str = "mssql+pyodbc://@ITDEV/FACETS?trusted_connection=yes&driver=ODBC+Driver+17+for+SQL+Server"
engine = sqlalchemy.create_engine(
    connection_str,
    connect_args={"query_timeout": 3}  # 设置3秒查询超时
)

with engine.begin() as conn:
    print(datetime.datetime.now())
    try:
        pd.read_sql("WAITFOR DELAY '00:00:15'; SELECT TOP 1 * FROM CMC_SBSB_SUBSC", conn)
    except Exception as e:
        print(f"触发超时或其他错误:{e}")
    print(datetime.datetime.now())

方法二:在连接内部设置底层pyodbc连接的超时属性

通过SQLAlchemy连接对象获取底层pyodbc连接,直接设置其timeout属性:

import datetime
import pandas as pd
import sqlalchemy

connection_str = "mssql+pyodbc://@ITDEV/FACETS?trusted_connection=yes&driver=ODBC+Driver+17+for+SQL+Server"
engine = sqlalchemy.create_engine(connection_str)

with engine.begin() as conn:
    # 获取底层pyodbc连接并设置3秒超时
    conn.connection.timeout = 3
    print(datetime.datetime.now())
    try:
        pd.read_sql("WAITFOR DELAY '00:00:15'; SELECT TOP 1 * FROM CMC_SBSB_SUBSC", conn)
    except Exception as e:
        print(f"触发超时或其他错误:{e}")
    print(datetime.datetime.now())

注意事项

  • 两种方法的超时单位均为秒,设置后超过指定时间未完成的查询会抛出pyodbc.OperationalError异常。
  • 需确保使用的ODBC Driver 17 for SQL Server版本支持该参数,该版本原生支持查询超时配置。
  • 必须添加异常捕获逻辑,避免超时直接导致程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:27:31