4

mod_wsgi を介して Linux ボックスで実行されている Python 2.7 上の SQL Alchemy 0.8.1 に問題があります。時々、「InvalidRequestError: このセッションは「準備済み」状態です。このトランザクション内でこれ以上 SQL を発行することはできません」が生成されます。

以下は、エラーの詳細なスタック トレースです。


...
 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.

このエラーはランダムに発生します。表示されるまでに数日かかる場合もあれば、5 分後に発生する場合もあります。これと最大の問題の原因がわかりません。このエラーの意味がわかりません。「準備完了」状態とは?ドキュメントには、この状態に関する情報はありません。私が見たところ、双方向トランザクションと何らかの関係がありますが、コードでは使用していません。私は Session.query と Session.commit を使用しています。

どんな助けでも大歓迎です。

4

1 に答える 1