Python mysql.connector 超时

14 投票
1 回答
24487 浏览
提问于 2025-04-18 10:29

这里有一个简单的方法,可以用mysql.connector模块连接到MySQL数据库。

db = mysql.connector.connect(
    host=DB_SERVER,
    port=DB_PORT,
    user=DB_UNAME,
    passwd=DB_PASSWORD,
    db=DB_NAME)
db.connect()
mysqlCursor.execute(query)

我想控制两个不同的超时时间。首先,我希望在.connect()函数上花费的时间不超过五秒。我已经搞定了这个。其次,我希望在.execute()函数上花费的时间不超过一秒。我该怎么做呢?

我是数据库管理员,所以如果需要的话,我可以在那边做一些调整。不过,我更希望只为一个特定的MySQL用户更改超时时间,而不是所有人,这就是我从Python这边入手的原因。

到目前为止,我发现了以下内容:

mysql.connector的文档列出了几个超时参数。connect-timeout会设置初始连接的超时时间,但据我所知,它并不能设置查询的超时时间。interactive-timeout会在没有活动时导致超时,但我认为这并不意味着如果查询执行时间过长,它也会超时。

connect-timeout=秒数
连接超时的秒数。在Linux上,这个超时也用于等待服务器的第一个响应。(timeout已经被connect-timeout替代,但为了向后兼容,MySQL 5.0仍然支持timeout。)

interactive-timeout=秒数
在关闭连接之前,允许的非活动时间(秒数)。客户端的session wait_timeout变量被设置为session interactive_timeout变量的值。

1 个回答

6

从MySQL 5.7.8开始,你可以为每个会话单独设置一个只针对SELECT语句的最大执行时间。你可以在连接后立即设置这个时间:

db = mysql.connector.connect(...)
cursor = db.cursor()
# Limit SELECTs to 1 second
cursor.execute("SET SESSION MAX_EXECUTION_TIME=1000")

撰写回答