Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlalchemy+;MySQL连接超时_Python_Mysql_Sqlalchemy - Fatal编程技术网

Python sqlalchemy+;MySQL连接超时

Python sqlalchemy+;MySQL连接超时,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我有一个使用sqlalchemy与MySQL数据库交互的守护进程。由于交互很少,连接很容易超时。我试图通过在创建数据库引擎时设置各种标志来解决这个问题,例如,pool\u recycle=3600,但似乎没有任何帮助 为了帮助我调试这个问题,我将本地mysql服务器的超时设置为10秒,并尝试了以下程序 import time import sqlalchemy engine = sqlalchemy.engine.create_engine("mysql://localhost") whil

我有一个使用sqlalchemy与MySQL数据库交互的守护进程。由于交互很少,连接很容易超时。我试图通过在创建数据库引擎时设置各种标志来解决这个问题,例如,
pool\u recycle=3600
,但似乎没有任何帮助

为了帮助我调试这个问题,我将本地mysql服务器的超时设置为10秒,并尝试了以下程序

import time
import sqlalchemy

engine = sqlalchemy.engine.create_engine("mysql://localhost")

while True:
    connection = engine.connect()
    result = connection.execute("SELECT 1")
    print result.fetchone()
    connection.close()
    time.sleep(15)
令人惊讶的是,我仍然会遇到如下异常:

sqlalchemy.exc.OperationalError: (OperationalError) (2006, 'MySQL server has gone away')
但是,如果我删除对
connection.close()
的调用,问题就会消失。这是怎么回事?为什么每次我调用
connect()
,sqlalchemy都不尝试建立新的连接


我正在将Python 2.7.3与sqlalchemy 0.9.8和MySQL 5.5.40一起使用。

我不能100%确定这是否能解决您的问题,但我在处理MySQL时遇到了类似的问题。只有当我使用pymysql连接到数据库时,它才被修复

您可以这样安装:

pip install pymysql
import time
import sqlalchemy

engine = sqlalchemy.engine.create_engine("mysql+pymysql://localhost")

while True:
    connection = engine.connect()
    result = connection.execute("SELECT 1")
    print result.fetchone()
    connection.close()
    time.sleep(15)
这将适用于linux和windows(如果已安装)

然后按如下方式给出连接字符串:

pip install pymysql
import time
import sqlalchemy

engine = sqlalchemy.engine.create_engine("mysql+pymysql://localhost")

while True:
    connection = engine.connect()
    result = connection.execute("SELECT 1")
    print result.fetchone()
    connection.close()
    time.sleep(15)
当我运行它时,我得到以下输出:

(1,)
(1,)
(1,)
(1,)
另一方面,我发现某些查询与SQLAlchemy 0.9.8不同。我必须安装版本0.9.3,以使我的应用程序不再中断

MySQL具有自动关闭连接的行为,
对于已空闲八小时或更长时间的连接。 要避免出现此问题,请使用pool\u recycle选项 它控制任何连接的最大使用期限:

引擎=创建引擎('mysql+mysqldb://...,池_回收=3600)


在调用create_引擎时,您可以只放置“pool_recycle”参数

谢谢你的信息-我会试试看!对于那些感兴趣的人来说,一个更新:到目前为止,唯一有效的方法就是用Ubuntu的Upstart监控脚本。当守护进程由于超时而崩溃时,Upstart将重新启动它。这不是最优雅的解决方案,但无论如何我都需要流程监控,所以就是这样。