[Twisted-Python] adbapi and multiple queries in single transaction.
phil at bubblehouse.org
Tue Jun 23 10:25:16 EDT 2009
On Jun 23, 2009, at 9:45 AM, Vishal Shetye wrote:
> I initially thought of putting all the queries per operation in a
> runInteraction. However this results in code-duplication as many
> queries are shared between different operations.
It seems like the easiest way to deal with this would be to make
'private' methods for all the standard queries; these methods/
functions would accept a transaction object like you said, but the
methods themselves would only be called from an interaction, which can
supply the transaction object.
Then in each public ObjectGateway method you can just define an inner
function to serve as the interaction, calling each private query
method in turn, using the transaction object provided to that
Here's a stupidly trivial example:
def __init__(self, pool):
self.pool = pool
def _getUserName(self, trans, user_id):
result = trans.execute('SELECT username FROM user WHERE id =
def _sessionUpdateQuery(self, trans, sid, username):
trans.execute('UPDATE session SET username = %s WHERE sid =
%s', [username, sid]);
def handleLogin(self, sid, user_id):
u = self._getUserName(trans, user_id)
self._sessionUpdateQuery(trans, sid, username)
Other than being careful not to mess around with the instance state
during those interactions (they are running in a thread, after all),
this should be pretty straightforward.
Hope this helps,
More information about the Twisted-Python