在使用 SQLAlchemy 连接数据库时遇到连接超时(Timeout)的问题,可能由多种原因引起。以下是一些常见的原因及其解决方法:
wait_timeout
和 interactive_timeout
参数。SHOW VARIABLES LIKE 'wait_timeout'; SHOW VARIABLES LIKE 'interactive_timeout';
如果这些值设置得过低,可以适当增加它们:SET GLOBAL wait_timeout = 28800; -- 8小时 SET GLOBAL interactive_timeout = 28800;max_connections
参数查看和调整。SHOW VARIABLES LIKE 'max_connections';pool_recycle
和 pool_timeout
。from sqlalchemy import create_engine engine = create_engine( 'mysql+pymysql://user:password@host/dbname', pool_size=10, max_overflow=20, pool_recycle=3600, # 连接回收时间(秒) pool_timeout=30 # 获取连接的超时时间(秒) )connect_timeout
。engine = create_engine( 'mysql+pymysql://user:password@host/dbname?connect_timeout=10' )with
语句) 或确保在操作完成后正确关闭会话,以防止连接泄漏。from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) with Session() as session: # 执行数据库操作 pass # 替换为实际操作SHOW PROCESSLIST
)查看当前连接和查询状态。SHOW PROCESSLIST;以下是一个调整后的 SQLAlchemy 引擎配置示例,包含了一些常见的连接池和超时设置:
from sqlalchemy import create_engine
engine = create_engine(
'mysql+pymysql://user:password@host/dbname',
pool_size=20, # 连接池大小
max_overflow=30, # 最大溢出连接数
pool_recycle=1800, # 连接回收时间(30分钟)
pool_timeout=30, # 获取连接的超时时间(秒)
connect_args={
'connect_timeout': 10 # 连接超时时间(秒)
}
)
领取专属 10元无门槛券
手把手带您无忧上云