2016-09-09 34 views
0

对此有几个相关的问题,但就我而言,所有这些解决方案都没有解决。这就是为什么我想再次问。我在使用sqlalchemy orm进行查询时触发这个错误。SQLAlchemy:在查询期间与MySQL服务器失去联系

Traceback (most recent call last): 
File "MyFile.py", line 1010, in <module> 
handler.handle(line.split('\t')) 
File "MyFile.py", line 849, in handle 
self.getRecord(whatIfFlag, id) 
File "MyFile.py", line 143, in getRecord 
newRecord = self.recordSearcher.getRecordByParams(name, pId) 
File "abc.py", line 67, in getRecord 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/orm/query.py", line 2361, in one 
ret = list(self) 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/orm/query.py", line 2404, in __iter__ 
return self._execute_and_instances(context) 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/orm/query.py", line 2419, in _execute_and_instances 
result = conn.execute(querycontext.statement, self._params) 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/engine/base.py", line 720, in execute 
return meth(self, multiparams, params) 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/elements.py", line 317, in _execute_on_connection 
return connection._execute_clauseelement(self, multiparams, params) 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/engine/base.py", line 817, in _execute_clauseelement 
compiled_sql, distilled_params 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/engine/base.py", line 947, in _execute_context 
context) 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/engine/base.py", line 1108, in _handle_dbapi_exception 
exc_info 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/util/compat.py", line 185, in raise_from_cause 
reraise(type(exception), exception, tb=exc_tb) 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/engine/base.py", line 940, in _execute_context 
context) 
File "/opt/product/python/prod/bin/2.7.6/lib/python2.7/site-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/engine/default.py", line 435, in do_execute 
cursor.execute(statement, parameters) 
File "build/bdist.linux-x86_64/egg/MySQLdb/cursors.py", line 205, in execute 
File "build/bdist.linux-x86_64/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler 
sqlalchemy.exc.OperationalError: (OperationalError) (2013, 'Lost connection to MySQL server during query') .... 


query = self.__session.query(MyTable).filter(and_(MyTable.NAME == name,MyTable.P_ID == p_id) 
try: 
    record = query.one() 
except NoResultFound: 
    new_record = MyTable(params) 
    self.__session.add(new_record) 
    self.__session.commit() 
    self.__session.close() 

预期只返回一条记录。这是我创建会话的方式。

sqlEngine = sqlalchemy.create_engine(self.getMySQLURI(), pool_recycle=10800, echo=False, echo_pool=False) 
session = scoped_session(sessionmaker(autoflush=True, 
             autocommit=False, 
             bind=sqlEngine, 
             expire_on_commit=False)) 

这些是我的mysql配置:interactive_timeout和wait_timeout设置为28800〜8小时。 net_write_timeout设置为3600〜60分钟,net_read_timeout设置为300〜5分钟。

任何帮助,高度赞赏。

回答

0

事实证明,这是应用程序服务器和数据库服务器之间的tcp_connect_timeout问题。 tcp连接超时默认为1小时,我的池回收设置为3小时。所以1到3之间的任何事情都失败了。发布答案以帮助稍后可能面对此问题的其他人。

+2

我无法在任何地方找到有关tcp_connect_timeout变量的信息。你能提供额外的信息吗? – Raphi

相关问题