[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