programing

MySQLDB SS커서를 효율적으로 사용하는 방법은?

telecom 2023. 9. 12. 19:51
반응형

MySQLDB SS커서를 효율적으로 사용하는 방법은?

큰 결과 집합을 처리해야 합니다(수십만 행, 때로는 그 이상일 수도 있음).
안타깝게도 (시동 시) 한 번에 검색해야 합니다.

가능한 한 적은 메모리를 사용해서 그렇게 하려고 합니다.
SO를 살펴봄으로써 저는 다음을 사용하는 것을 발견했습니다.SSCursor제가 찾고 있는 물건일 수도 있지만, 아직 정확히 어떻게 사용하는지는 잘 모르겠어요.

하고 있습니까?fetchall()기본 커서 또는 SS커서 또는 동일한 것(메모리 사용량 기준)?

커서 행에서 하나씩(또는 몇 개씩) '스트리밍'할 수 있으며, 만약 그렇다면 가장 효율적인 방법은 무엇입니까?

저는 오토 올멘더의 대답에 동의하지만 데니스 오트키다흐의 말을 분명히 하자면 오토의 fetch() 함수를 사용하지 않고 결과를 반복할 수 있는 방법은 다음과 같습니다.

import MySQLdb.cursors
connection=MySQLdb.connect(
    host="thehost",user="theuser",
    passwd="thepassword",db="thedb",
    cursorclass = MySQLdb.cursors.SSCursor)
cursor=connection.cursor()
cursor.execute(query)
for row in cursor:
    print(row)

큰 결과 세트를 가져올 때는 반드시 SSC 커서를 사용해야 합니다.비슷한 문제가 생겼을 때 저에게 큰 변화를 주었습니다.다음과 같이 사용할 수 있습니다.

import MySQLdb
import MySQLdb.cursors

connection = MySQLdb.connect(
        host=host, port=port, user=username, passwd=password, db=database, 
        cursorclass=MySQLdb.cursors.SSCursor) # put the cursorclass here
cursor = connection.cursor()

이제 다음을 사용하여 쿼리를 실행할 수 있습니다.cursor.execute()커서를 반복기로 사용합니다.

편집: 불필요한 홈그로운 반복자를 제거했습니다. 데니스 고마워요!

또는 다음을 사용할 수 있습니다.SSCursor연결 개체 외부(이미 연결을 정의하고 모든 연결 사용을 원하지 않을 때는 매우 중요함)SSCursor커서 클래스(curser class)로서.

import MySQLdb
from MySQLdb.cursors import SSCursor # or you can use SSDictCursor

connection = MySQLdb.connect(
        host=host, port=port, user=username, passwd=password, db=database)
cursor = SSCursor(connection)
cursor.execute(query)
for row in cursor:
    print(row)   

언급URL : https://stackoverflow.com/questions/1808150/how-to-efficiently-use-mysqldb-sscursor

반응형