"prepared" state is an internal state in the Session which occurs within the 
transaction commit process.   This error can occur in one of the following ways:

1. you have an after_commit() event handler which raised an exception, leaving 
the Session in the "prepared" state without being able to finish its commit, 
then that Session was used again to try to emit a query insted of being 
discarded

2. you have concurrent access to the session such that one thread is calling 
upon session.commit() while another is calling upon a query.   I know you said 
that your mod_wsgi is configured for "single thread", but the pattern in which 
the error occurs here (very non-deterministically) strongly suggests there are 
is in fact more than one thread occurring.




On Jul 12, 2013, at 3:26 AM, [email protected] wrote:

> I have a problem with SQL Alchemy 0.8.1 on Python 2.7 running on linux box 
> via mod_wsgi. From time to time it produces the "InvalidRequestError: This 
> session is in 'prepared' state; no further SQL can be emitted within this 
> transaction". I use mod_wsgi with multiple processes of 1 thread per process.
> 
> 
> This error happens at random - it may take a few days to see it or it might 
> happen after a 5 minutes. I cannot understand what causes this and the 
> biggest problem - I don't understand what this error means. What is 
> 'prepared' state? The documentation has no information on this state. From 
> what I saw it has some relation to two-way transactions but I do not use them 
> in my code. I use Session.query and Session.commit.
> 
> Any help would be appreciated.
> 
> Below is detailed stack trace of the error:
> 
> ...
>  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 
> 2173, in one
>     ret = list(self)
>                 self = <sqlalchemy.orm.query.Query object at 0x7f6f64348dd0>
> 
>   File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 
> 2216, in __iter__
>     return self._execute_and_instances(context)
>                 self = <sqlalchemy.orm.query.Query object at 0x7f6f64348dd0>
>              context = <sqlalchemy.orm.query.QueryContext object at 
> 0x7f6f64348d50>
> 
>   File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 
> 2229, in _execute_and_instances
>     close_with_result=True)
>         querycontext = <sqlalchemy.orm.query.QueryContext object at 
> 0x7f6f64348d50>
>                 self = <sqlalchemy.orm.query.Query object at 0x7f6f64348dd0>
> 
>   File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 
> 2220, in _connection_from_session
>     **kw)
>                 self = <sqlalchemy.orm.query.Query object at 0x7f6f64348dd0>
>                   kw = {'clause': , 'close_with_result': True, 'mapper': }
> 
>   File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", 
> line 798, in connection
>     close_with_result=close_with_result)
>               mapper = 
>               clause = <sqlalchemy.sql.expression.Select at 0x7f6f64348d90; 
> Select object>
>                 self = <sqlalchemy.orm.session.Session object at 
> 0x7f6f68f6fe50>
>                   kw = {}
>                 bind = 
> Engine(mysql+mysqldb://xxx:yyy@localhost/zzz?charset=utf8)
>    close_with_result = True
> 
>   File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", 
> line 802, in _connection_for_bind
>     return self.transaction._connection_for_bind(engine)
>               engine = 
> Engine(mysql+mysqldb://xxx:yyy@localhost/zzz?charset=utf8)
>                 self = <sqlalchemy.orm.session.Session object at 
> 0x7f6f68f6fe50>
>               kwargs = {'close_with_result': True}
> 
>   File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", 
> line 281, in _connection_for_bind
>     self._assert_active()
>                 bind = 
> Engine(mysql+mysqldb://xxx:yyy@localhost/zzz?charset=utf8)
>                 self = <sqlalchemy.orm.session.SessionTransaction object at 
> 0x7f6f69be8050>
> 
>   File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", 
> line 181, in _assert_active
>     "This session is in 'prepared' state; no further "
>          rollback_ok = False
>          prepared_ok = False
>           closed_msg = 'This transaction is closed'
>                 self = <sqlalchemy.orm.session.SessionTransaction object at 
> 0x7f6f69be8050>
> 
> InvalidRequestError: This session is in 'prepared' state; no further SQL can 
> be emitted within this transaction.
>  
> 
>  
> 
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to