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
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() |