Python金字塔SQLAlchemy,MySQL服务器已经消失了

2024-05-13 09:22:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

有什么想法吗?在

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

一。在

^{pr2}$

一。在

engine = engine_from_config(settings, 'sqlalchemy.twelvemt.')
DBSession.configure(bind=engine)

一。在

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


Tags: 数据库应用程序cache错误mysqltimeoutselectglobal
3条回答

尝试为您的连接设置sqlalchemy.pool_recycle

当我使用mySQL时,我总是把它添加到我的配置文件中

sqlalchemy.pool_recycle = 3600

如果没有这一点,在活动中长时间暂停后,我会在第一个请求上得到MySQL server has gone away。在

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

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

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

我通过在每个请求后对会话调用remove()来解决这个问题。您可以通过定义全局函数来完成此操作:

def remove_session(request, response):
    request.dbsession.remove()

然后,将此函数设置为每个涉及请求和数据库会话的类都运行:

^{pr2}$

这是因为SQLAlchemy希望用户处理数据库会话的打开和关闭。更多信息可在documentation中找到。在

相关问题 更多 >