Python Pyramid SQLAlchemy,MySQL 服务器消失了

gim*_*893 5 python mysql sqlalchemy pyramid

我已经准备了很多关于这个问题的帖子。我的理解是应用程序有一个设置,规定在删除数据库连接并创建新连接之前保持空闲数据库连接多长时间。MySQL 有一个设置,规定保持空闲连接多长时间。没有站点活动后,MySQL 会使应用程序的连接超时。但应用程序不知道这一点,仍然尝试使用现有连接,但失败了。失败后,应用程序会断开连接并建立一个新连接,然后就可以了。

我在本地 mysql 服务器上将wait_timeout设置为 10 秒。我在本地运行的应用程序上将pool_recycle设置为 5 秒。10 秒不活动后,我发出请求,但仍然收到此错误。10秒内再发出一次请求就可以了。等待超过10秒,又出现这个错误。

有什么想法吗?

mysql> SELECT @@global.wait_timeout\G
*************************** 1. row ***************************
@@global.wait_timeout: 10
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

sqlalchemy.twelvemt.pool_recycle = 5
Run Code Online (Sandbox Code Playgroud)

engine = engine_from_config(settings, 'sqlalchemy.twelvemt.')
DBSession.configure(bind=engine)
Run Code Online (Sandbox Code Playgroud)

OperationalError: (OperationalError) (2006, 'MySQL server has gone away') 'SELECT beaker_cache.data \nFROM beaker_cache \nWHERE beaker_cache.namespace = %s' ('7cd57e290c294c499e232f98354a1f70',)
Run Code Online (Sandbox Code Playgroud)

Che*_*art 2

看起来您收到的错误是由 Beaker 连接引发的,而不是由 DBSession 连接引发的 - 需要为每个连接设置 pool_recycle 选项。

假设您在 x.ini 文件中配置 Beaker,您可以通过 传递 sqlalchemy 选项session.sa.*,因此session.sa.pool_recycle = 5

请参阅http://docs.pylonsproject.org/projects/pylons-webframework/en/v0.9.7/sessions.html#sa