python - SQLAlchemy:查询期间失去与 MySQL 服务器的连接

标签 python mysql sqlalchemy

有几个与此相关的问题,但就我而言,所有这些解决方案都不起作用。所以我才想再问一次。当我使用 sqlalchemy orm 触发下面的查询时,我收到此错误。

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()

预计仅返回一条记录。这就是我创建 session 的方式。

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 分钟。

非常感谢任何帮助。

最佳答案

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

关于python - SQLAlchemy:查询期间失去与 MySQL 服务器的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39405808/

相关文章:

python - 将数据从 Pandas 存储到 Snowflake 的最佳方式

python - 为什么必须调用 db.session.remove()?

Python 语音识别库 - 总是在听?

python : huge looping in SQL Table

用于 GPU/并行光线追踪的 Python(或不是……)框架?

python类属性

mysql - 如何从 MySQL 数据库的不同表中提取创建语句?

mysql - 编写一个查询,显示累计罚款超过 1000 的所有汽车的累计罚款总额

php - 从数据库填充 HTML 表单

python - 避免插入 SQL 表中已有的记录