[Twisted-Python] newbie adbapi question
Martin Waite
martin at datacash.com
Tue Mar 11 04:36:56 EST 2003
Hi,
I'm making some progress on my application, but there are
a few ugly looking things in here and I wonder if I'm doing
them right:
1) one theme (I would have said thread, but I'm not using
threads) of execution requires that 3 database queries
are executed one after the other. My current solution
involves chaining calls to adbapi.operation() and
adbapi.query() together. My first query updates a table
and so calls adbapi.operation(). In the callback to this,
I make a call to adbapi.query(). In the callback to this,
I make another call to adbapi.operation(). My final callback
reschedules the original call with the reactor - effectively
making this sequence of operations repeat indefinitely.
This seems to work, but is making my code look a bit like
a state machine. This could get hairy. Instead, should I be
adding all my callbacks at one time to the same Deferred ?
2) I'm using MySQL as the database. Normally, following an update,
I would fetch the result code. adbapi._run_operation() seems to
throw it away however, so all I ever get is None. I would prefer
to get the MySQL result, which tells me how many rows I updated.
This lets me decide whether to run other queries.
The suspicious code in _run_operation (v1.0.2):
try:
apply(curs.execute, args, kw)
result = None
curs.close()
conn.commit()
To me, this doesn't look interested in the result code from the
database. I'm used to using the Perl DBI - that distinguishes
between queries returning rows (select) and those
returning result codes (delete, update). Am I mistaken mapping
these onto adbapi.query() and adbapi.operation() ?
regards,
Martin
More information about the Twisted-Python
mailing list