[DB-SIG] Bug in PostgreSQL/Python (7.1.1/1.5) fetchone()

Kevin Cole kjcole@gri.gallaudet.edu
Mon, 4 Jun 2001 22:46:17 -0400 (EDT)


Hi again,

It appears that the bug in pgdb occurs for both examples below.  Both
return the first row multiple times.  (This is with PostgreSQL 7.1.1
and Python 1.5.2.)
_________________________________________

    for hits in range(curse.rowcount):
        print curse.fetchone()
_________________________________________

    row = curse.fetchone()
    while row:
        print row
        row = curse.fetchone()
_________________________________________

On Mon, 4 Jun 2001, Andy Dustman <andy@dustman.net> wrote:

>On Fri, 1 Jun 2001, Kevin Cole wrote:

> > Hi,
> >
> > I've got a little test code that sorta works, but not as well as I'd
> > like.  fetchall() does what I want, fetchone() appears to fetch the
> > same row cursor.rowcount times, rather than fetching the next row.
> > Here's what I'm doing:
> >
> >     import pgdb
> >     mydb = pgdb.connect("localhost:mydb")
> >     curse = mydb.cursor()
> >     curse.execute("select * from mytable where state = 'MD')
> >     for hits in range(curse.rowcount):
> >        print curse.fetchone()
> >
> > If I use "for hits in curse.fetchall():" I get what I expect, and
> > printing curse.rowcount yields the correct number of rows.  What am
> > I misunderstanding?

> Nothing that I can see. Each fetchone() invocation should return a new
> row, so this sounds like a pgdb bug. I wouldn't use range(curse.rowcount)
> myself; more likely I'd use fetchall(). If the result set can be
> arbitrarily large, I'd do something like this:
>
> row = curse.fetchone()
> while row:
>     print row
>     row = curse.fetchone()
>
> --
> Andy Dustman         PGP: 0xC72F3F1D
>     @       .net     http://dustman.net/andy

-- 
 Kevin Cole                    |  E-mail:  kjcole@gri.gallaudet.edu
 Gallaudet Research Institute  |  WWW:     http://gri.gallaudet.edu/~kjcole/
 Hall Memorial Bldg  S-419     |  Voice:   (202) 651-5135
 Washington, D.C.  20002-3695  |  FAX:     (202) 651-5746