python - 합치기 - cx_Oracle:결과 세트를 반복하는 방법은 무엇입니까?




파이썬 문자열 변수 합치기 (2)

표준적인 방법은 내장 된 커서 반복자를 사용하는 것입니다.

curs.execute('select * from people')
for row in curs:
    print row

fetchall() 을 사용하여 모든 행을 한 번에 가져올 수 있습니다.

for row in curs.fetchall():
    print row

반환 된 값을 포함하는 파이썬리스트를 생성 할 때 편리하다.

curs.execute('select first_name from people')
names = [row[0] for row in curs.fetchall()]

이것은 작은 결과 집합에 유용 할 수 있지만 결과 집합이 클 경우 나쁜 결과를 초래할 수 있습니다.

  • 전체 결과 세트가 클라이언트 프로세스로 리턴 될 때까지 기다려야합니다.

  • 내장 목록을 보유하기 위해 클라이언트의 많은 메모리를 먹을 수 있습니다.

  • 파이썬이 목록을 구성하고 해체하는 데는 어느 정도 시간이 걸릴 수 있습니다.

결과 집합에 반환되는 단일 행이 있다는 것을 알고 있으면 fetchone() 을 호출하여 단일 행을 가져올 수 있습니다.

curs.execute('select max(x) from t')
maxValue = curs.fetchone()[0]

마지막으로 한 번에 한 행을 가져 오는 결과 세트를 반복 할 수 있습니다. 일반적으로 iterator를 사용하는 것 이상의 이점은 없습니다.

row = curs.fetchone()
while row:
    print row
    row = curs.fetchone()

결과 집합을 반복하는 몇 가지 방법이 있습니다. 각각의 트레이드 오프는 무엇입니까?


필자가 선호하는 방법은 커서 반복자이지만 커서의 arrayize 속성을 먼저 설정하는 것입니다.

curs.execute('select * from people')
curs.arraysize = 256
for row in curs:
    print row

이 예제에서 cx_Oracle는 한 번에 Oracle 256 행을 가져와 수행해야하는 네트워크 왕복 횟수를 줄입니다.





cx-oracle