使用 SQLAlchemy 对 MySQL 数据库运行时,从客户端控制超时的正确方法是什么?connect_timeout
URL 参数似乎不足。
我更感兴趣的是当运行数据库的机器(例如,意外从网络中消失)时会发生什么。我不担心查询本身花费太长时间。
如果在到达循环之前somehost不可用,则以下脚本会执行您所期望的操作(即,大约一秒后超时) 。但是如果某个主机在循环过程中出现故障(例如,尝试在循环开始后拔掉它的网络电缆),那么超时似乎至少需要 18 秒。我缺少一些其他设置或参数吗?while
while
wait_timeout
会话变量不起作用并不奇怪,因为我认为这是一个服务器端变量。但我把它扔在那里只是为了确定。
from sqlalchemy import *
from sqlalchemy.exc import *
import time
import sys
engine = create_engine("mysql://user:password@somehost/test?connect_timeout=1")
try:
engine.execute("set session wait_timeout = 1;")
while True:
t = time.time()
print t
engine.execute("show tables;")
except DBAPIError:
pass
finally:
print time.time() - t, "seconds to time out"