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

如何在Python中检测数据库查询超时?

如何在Python中检测数据库查询超时?

嗨,我懂你的痛点!当你在MySQL里设置了max_execution_time来终止慢查询后,Python这边居然没主动抛出异常或给出提示,确实让人摸不着头脑。其实MySQL服务器在终止超时查询后,会留下一个隐藏的警告信息,我们可以通过以下方法捕捉到它:

核心思路:查询执行后检查服务器警告

MySQL在因max_execution_time终止查询时,会生成一条代码为1317的警告(提示内容类似“Query execution was interrupted”)。我们只需要在目标查询执行完成后,立刻查询服务器的警告列表,就能判断是否发生了超时。

通用实现(适配大多数MySQL Python驱动)

执行完你的业务查询后,马上执行SHOW WARNINGS语句来获取警告信息:

self.db_cursor = self.db_conn.cursor(buffered=False)
self.db_cursor.execute(query)

# 关键步骤:执行完查询后立即检查警告
self.db_cursor.execute("SHOW WARNINGS")
warnings = self.db_cursor.fetchall()

# 遍历警告,检测超时对应的代码1317
for warning in warnings:
    # 警告元组结构为 (警告级别, 错误代码, 提示信息)
    if warning[1] == 1317:
        # 这里添加你的用户提示逻辑
        print("抱歉,查询执行超时已被终止,请尝试优化查询或调整超时时间!")

更简洁的方式(针对pymysql驱动)

如果你用的是pymysql,它提供了直接获取警告的方法show_warnings(),不用手动执行SQL:

self.db_cursor.execute(query)

# 直接调用驱动内置方法获取警告
warnings = self.db_cursor.show_warnings()
for warn in warnings:
    if warn[1] == 1317:
        # 处理超时逻辑
        print("查询超时被终止,请稍后再试或优化查询语句!")

注意事项

  • 一定要在目标查询执行后立刻检查警告,后续执行的其他SQL会覆盖当前的警告列表,导致无法捕捉到超时信息。
  • 如果你同时有其他类型的警告,记得只针对代码1317的情况做超时判断,避免误触发。

备注:内容来源于stack exchange,提问作者pecks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:18:06