I've made web application using Pyramid 1.2.5 + Python 2.7.1 + SQLAlchemy 0.7.4 and occasionally encountered the following error.
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/pyramid/router.py", line 176, in __call__
response = self.handle_request(request)
File "/usr/local/lib/python2.7/site-packages/pyramid_debugtoolbar-0.9.7-py2.7.egg/pyramid_debugtoolbar/toolbar.py", line 103, in toolbar_tween return handler(request)
File "/usr/local/lib/python2.7/site-packages/pyramid/tweens.py", line 17, in excview_tween
response = handler(request)
File "/usr/local/lib/python2.7/site-packages/pyramid_tm-0.3-py2.7.egg/pyramid_tm/__init__.py", line 61, in tm_tween
response = handler(request) File "/usr/local/lib/python2.7/site-packages/pyramid/router.py", line 153, in handle_request
response = view_callable(context, request)
File "/usr/local/lib/python2.7/site-packages/pyramid/config/views.py", line 187, in _secured_view
return view(context, request)
File "/usr/local/lib/python2.7/site-packages/pyramid/config/views.py", line 320, in viewresult_to_response
result = view(context, request)
File "/usr/local/lib/python2.7/site-packages/pyramid/config/views.py", line 403, in _requestonly_view
response = view(request)
File "/home/ec2-user/work/DP-MGMT/dp_mgmt/views/users.py", line 57, in users
for user, snsuser in query.all():
File "build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py", line 1947, in all
return list(self)
File "build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py", line 2057, in __iter__
return self._execute_and_instances(context)
File "build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py", line 2072, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py", line 1405, in execute
params)
File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py", line 1538, in _execute_clauseelement
compiled_sql, distilled_params
File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py", line 1605, in _execute_context
None, None)
File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py", line 1599, in _execute_context
conn = self._revalidate_connection()
File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py", line 1018, in _revalidate_connection
"Can't reconnect until invalid "
StatementError: Can't reconnect until invalid transaction is rolled back (original cause: InvalidRequestError: Can't reconnect until invalid transaction is rolled back) 'SELECT dp_user.user_id AS dp_user_user_id, dp_user.email AS dp_user_email, dp_user.new_email AS dp_user_new_email, dp_sns_user.`SNS_name` AS `dp_sns_user_SNS_name` \\nFROM dp_user, dp_sns_user \\nWHERE dp_user.status = %s AND dp_user.user_id = dp_sns_user.user_id AND dp_user.signup_date >= %s AND dp_user.signup_date < %s ORDER BY dp_user.signup_date DESC' [immutabledict({})]
All queries what my web app is doing is SELECT. So I don't think I need to explicitly call session.commit() at all. I can't understand why "invalid transaction" ever occurred.
mysqld's wait_timeout is 28800 and I create sqlalchemy engine with pool_recycle of 3600.
after I restarted apache, which run my web app through wsgi, it starts working again.