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
'programing' 카테고리의 다른 글
apk를 설치하지 않고 Android .apk 파일 VersionName 또는 VersionCode 가져오기 (0) | 2023.09.12 |
---|---|
SQL에 항상 소수점 자리를 표시하시겠습니까? (0) | 2023.09.12 |
MySQL(MariaDB):삭제해야 합니다.MySQL(MariaDB):삭제해야 합니다.문자열에서 \n문자열에서 \n (0) | 2023.09.12 |
가려진 배경 영역의 밝기에 따라 텍스트 색상을 변경하시겠습니까? (0) | 2023.09.12 |
Wordpress query_posts 사용자 지정 필드별 순서 지정 (0) | 2023.09.12 |