from twisted.internet import reactor, defer, threads import sqlalchemy as sa from exceptions import Exception def _transact(engine): def _transaction(f): def _wrap(*args, **kwargs): def _1(): conn = meta.engine.contextual_connect() trans = conn.begin() try: r = f(*args, **kwargs) except Exception, e: print e trans.rollback() conn.close() raise else: trans.commit() conn.close() return r return threads.deferToThread(_1) _wrap.__name__ = f.__name__ return _wrap return _transaction reactor.suggestThreadPoolSize(10) meta = sa.DynamicMetaData(threadlocal = False) users = sa.table('users', sa.Column('id', sa.Integer, primary_key = True), sa.Column('firstname', sa.String(128)), sa.Column('lastname', sa.String(128)), sa.Column('nickname', sa.String(128)), sa.Column('email', sa.String(255)), ) transact = _transact(meta) sq = sa.create_engine("sqlite://./test.db") meta.connect(sq) @transact def aa(): users.insert().execute(firstname = "test", lastname = "test", nickname = "test", email = "blah") reactor.callLater(0.0, aa) reactor.run() Traceback : Traceback (most recent call last): File "/usr/lib/python2.4/threading.py", line 422, in run self.__target(*self.__args, **self.__kwargs) File "/usr/lib/python2.4/site-packages/twisted/python/threadpool.py", line 148, in _worker context.call(ctx, function, *args, **kwargs) File "/usr/lib/python2.4/site-packages/twisted/python/context.py", line 59, in callWithContext return self.currentContext().callWithContext(ctx, func, *args, **kw) File "/usr/lib/python2.4/site-packages/twisted/python/context.py", line 37, in callWithContext return func(*args,**kw) --- --- File "/usr/lib/python2.4/site-packages/twisted/internet/threads.py", line 25, in _putResultInDeferred result = f(*args, **kwargs) File "test.py", line 15, in _1 r = f(*args, **kwargs) File "test.py", line 53, in aa email = "blah") File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line 509, in execute return self.execute_using(self.engine, *multiparams, **params) File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line 463, in execute_using return self.compile(engine=engine, parameters=compile_params).execute(*multiparams, **params) File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line 374, in execute raise exceptions.InvalidRequestError("This Compiled object is not bound to any engine.") sqlalchemy.exceptions.InvalidRequestError: This Compiled object is not bound to any engine.