From: Gerhard <ger...@op...> - 2002-11-20 21:04:31
|
You wrote: > Can anyone tell me how to programatically check the value of a PgBoolean > object? I am doing the following: > > ##### > from pyPgSQL import PgSQL > from pyPgSQL import libpq > > db = PgSQL.connect("localhost::testdb") > cursor = db.cursor() > cursor.callproc("sp_TestBoolean", 1, 1) > retval = cursor.fetchone() > ##### > > When I print the value of retval, I get this: > [<PgBoolean instance at 0x401c8900: Value: False>] > > I would like to be able to do something like this: > > if retval == true: > # do something > else: > # do something else It's not wise to test for truth values using == true. In Python, you test wether something is nonzero, or zero. These are examples of objects that are nonzero: 1, 2, 3, 4, 5, "foobar", [3,4,5], (3,4) You can see this when you use them in an if-statement: >>> if "foobar": print "true" ... true These are examples of objects whose truth value is "false": 0, 0.0, "", [], () Proof: >>> if not 0.0: print "false" ... false Now, back to pyPgSQL :-) You simply test for the truth value of PgBooleans using the if-statement: if retval: # do something else: # do something else As far as "== true" is concerned, this does not exist in Python. *But* there is are "True" and "False" constants in Python 2.2.2 (these are really ints in 2.2.2). In Python 2.3 (still in development), we have a real boolean type. But please don't do things like: if foo == True: # ... just because that's possible with 2.2.2 and later. Such code hurts my eyes ;-) It's also more verbose than it needs to be. And error-prone, because it requires that the class or type of foo support comparison to "True". Checking for the nonzero-ness is much more rubost, and works with all objects, as you've seen above (ints, longs, floats, strings, lists, etc.). HTH, -- Gerhard Häring OPUS GmbH München Tel.: +49 89 - 889 49 7 - 32 http://www.opus-gmbh.net/ |