[Twisted-Python] Missing something basic on defer and postgresql

Christopher Armstrong radix at twistedmatrix.com
Mon May 10 11:41:28 EDT 2004

James R. Saker Jr. wrote:
> I think I'm missing something rather basic and would greatly appreciate
> any suggestions.
> After working through the Twisted RDBMS example (with no luck - the
> second RDBMS example gets a deferred but fails to run
> .addCallback(printResult), I thought I'd read more about deferreds in
> its own section and made a simple postgresql example using the third
> example in the Deferreds section. 
> When I run this (with database = postgresql, dbname = mydb, table =
> myuser), it yields the following:
> Got to getData
> got to gotResults with name = Joe
> ...but never runs addCallback(self, _toHTML). Apparently I'm missing
> something pretty obvious about callbacks - and may be the same issue I
> dealt with in the RDBMS example. Any suggestions? 
> jamie

> ##~ begin dbserver.py
> from twisted.enterprise import adbapi
> from twisted.internet import reactor, defer
> dbpool = adbapi.ConnectionPool("psycopg", 'dbname=mydb user=postgres')
> class Getter:
>    def gotResults(self, name):
>       print "got to gotResults with name = %s" % name
>       return dbpool.runQuery("SELECT age FROM myuser WHERE name = '%s'"
> % name)
>    def _toHTML(self, r):
>       print "Got to _toHTML"
>       print "Result is: %s" % r
>    def getData(self, x):
>       self.d = defer.Deferred()
>       print "Got to getData"
>       reactor.callLater(2, self.gotResults, x)
>       self.d.addCallback(self._toHTML)
>       return self.d

Yeah, this is wrong. You've got two Deferreds here: the one you cerated 
manually in getData, and the one that runQuery returns. You're *throwing 
away* the one that runQuery returns, and you're never triggering a 
callback on the one that you're creating manually. It doesn't seem that 
there's a reason to create your own Deferred, anyway, so replace getData 
with this:

def getData(self, x):
     d = dbpool.runQuery("...") # no need for self.d, afaics
     return d

And get rid of gotResults.

  Twisted | Christopher Armstrong: International Man of Twistery
   Radix  |          Release Manager,  Twisted Project
---------+           http://radix.twistedmatrix.com/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 256 bytes
Desc: OpenPGP digital signature
Url : http://twistedmatrix.com/pipermail/twisted-python/attachments/20040510/ae6a100c/attachment.pgp 

More information about the Twisted-Python mailing list