getting an empty tuple

Steven D'Aprano steve at
Sun Jul 31 18:40:32 CEST 2005

On Sun, 31 Jul 2005 08:40:26 -0700, nephish wrote:

> Hey there,
> i have a simple database query that returns as a tuple the number of
> rows that the query selected.
> kinda like this
>>>> cursor.execute('select value from table where autoinc > 234')
>>>> x = cursor.fetchall()
>>>> print x
>>>> 21L

21L is not a tuple, it is a long integer.

> ok, means 21 rows met the criteria of the query. but if there are none
> that match,
> like i do a
>>>> print x
>>>> 0L
> how do i encorporate that into an equation ?
> i have tried all kinds of stuff

And did they work? If they didn't work, tell us the exact error message
you got.

> if x == 0L

If x is a long integer, then that will work. Of just "if x == 0:" will
work too.

> if x(0) == None

No. That means x is a function, and you are giving it an argument of 0,
and it returns None.

> if x == None

You said that your query returns a tuple, but then gave an example where
it returns a long int. None is not a tuple, nor a long int, so testing
either of those things against None will never be true.

Did you try any of these things in the interactive interpreter? Python is
a great language for experimenting, because you can try this yourself:

# run your setup code ...
# and then do some experimenting
cursor.execute('select value from table where autoinc > 99999999')
# or some value that will never happen
x = cursor.fetchall()
print x

What do you get?

> anyway, what shoud i do to test if the result is empty?

Long ints are never empty, but they can be zero:

if x == 0:
    print "no rows were found"
elif x == 1:
    print "1 row was found"
    print "%d rows were found" % x

Tuples can be empty: 

if len(x) == 0:
    print "no rows were found"

or if you prefer:

if x == ():
    print "no rows were found"

But the cleanest, most Pythonic way is just to do a truth-test:

if x:
    print "something was found"
    print "x is empty, false, blank, nothing..."


More information about the Python-list mailing list