comparing results of fetchall() with a known value

Skip Montanaro skip at pobox.com
Mon Aug 20 20:13:52 EDT 2001


    Jeff> Here's what I've done: I created an odbc connect to the database,
    Jeff> opened a cursor, executed the sql, then set a variable: namelist =
    Jeff> cursor.fetchall().  What's got me stumped is that "namelist" is a
    Jeff> list of tuples with sample data like: [('smith',), ('johnson',),
    Jeff> ('jackson',), ('jones',)]

That's what it's supposed to do.  If you execute something like

    select a,b,c from mytable where name="monty python"

You'd get a list of three-element tuples from fetchall(), one for each row
in the database that matched the where clause.  For consistency, if you
execute

    select a from mytable where name="monty python"

It still returns a list of tuples, it's just that each tuple only has one
element.  This allows you to treat the results of all queries in a similar
fashion. 

One thing I'm about to experiment with is MySQLdb's DictCursor.  Instead of
returning a list of tuples it returns a list of dicts, whose keys are the
field names, e.g.:

    [{"a": "manny", "b": "moe", "c": "jeff"}, ...]

or

    [{"mytable.a": "manny", "mytable.b": "moe", "mytable.c": "jeff"}, ...]

The problem with returning lists of tuples is that your output order is
somewhat fragile.  With dicts, you don't have that problem.

-- 
Skip Montanaro (skip at pobox.com)
http://www.mojam.com/
http://www.musi-cal.com/




More information about the Python-list mailing list