Re: Iterating through cur and cur.fetchone()

From: Daniele Varrazzo <daniele(dot)varrazzo(at)gmail(dot)com>
To: Håvard Wahl Kongsgård <haavard(dot)kongsgaard(at)gmail(dot)com>
Cc: psycopg <psycopg(at)postgresql(dot)org>
Subject: Re: Iterating through cur and cur.fetchone()
Date: 2011-10-10 11:19:14
Message-ID: CA+mi_8aWGEwB-xxQY1nKm-YL3z6BgSZnGo76rgZ5uzybXSW4oQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: psycopg

2011/10/10 Håvard Wahl Kongsgård <haavard(dot)kongsgaard(at)gmail(dot)com>:
> Hi, how do I use cur.fetchone() when iterating through a cur object.
>
> with
> conn = psycopg2.connect()
> cur = conn.cursor()
> SQL = ('select * from something limit 1000')
>
> n = 1
> cur.execute(SQL)
> for edge_list in cur:
>    edge = cur.fetchone()
>    print n
>
>    n = n +1
>
> I get
> n = 500
>
> when I skip edge = cur.fetchone()
>
> for edge_list in cur:
>    print n
>
>    n = n +1
>
> n = 1000
>
> Why does this happen, and what is the solution?

You are consuming the cursor both with the iteration and with the
fetchone. You should either use:

for record in cur:
# use record

or

while 1:
record = cur.fetchone()
if not record: break
# use record

Not mix the two together.

-- Daniele

In response to

Browse psycopg by date

  From Date Subject
Next Message Håvard Wahl Kongsgård 2011-10-10 11:19:23 Re: Iterating through cur and cur.fetchone()
Previous Message Håvard Wahl Kongsgård 2011-10-10 10:57:12 Iterating through cur and cur.fetchone()