2017-01-23 10 views
1

는이 코드가 무대 뒤에서 무엇을하는지 이해하려고 노력 해요 :커서를 반복 할 때 psycopg2는 무엇을합니까?

PEP 249 내 이해 당
import psycopg2 

c = psycopg2.connect('db=some_db user=me').cursor() 
c.execute('select * from some_table') 
for row in c: 
    pass 

이 반복 Cursor.fetchone()를 호출하는 것과입니다 Cursor.next()를 호출이었다이었다. 그러나, psycopg2 문서 say the following는 : 데이터베이스 쿼리가 실행되면

의 Psycopg 커서 일반적으로 클라이언트 프로세스로 전송, 백엔드에 의해 반환 모든 레코드를 가져옵니다.

그래서 위의 코드를 실행하면 결과를 서버에 저장하고 하나씩 가져 오는 것입니까, 아니면 모든 것을 한꺼번에 가져 오는 것입니까?

답변

1

구성 방법에 따라 달라집니다. psycopg2. itersizeserver side cursors을 참조하십시오.

기본적으로 모든 행을 클라이언트 메모리로 반입 한 다음 커서로 반입 된 행을 반복합니다. 하지만 위의 문서에서는 서버 쪽 커서 대신 배치 가져 오기를 구성 할 수 있습니다.