2011-02-06 2 views
2

그래서 나는 the documentation을 읽은 SELECT 문에 의해 반환되는 행의 수를 알려는 말한다 :, 왜 cursor.rowcount 수 없습니다() 나에게

Cursor.rowcount¶

sqlite3 모듈의 Cursor 클래스가이 특성을 구현하지만 " 영향을받는 행/열 선택"결정에 데이터베이스 엔진 자체의 지원이 기발한 것입니다.

모든 개의 행을 가져올 때까지 행의 수를 확인할 수 없으므로 여기에는 SELECT 문 이 포함됩니다.

어떻게 SELECT를 실행 한 직후에 반환 된 행 수를 결정할 수 없습니까? 확실히 실행 된 쿼리는 이제 모든 행을 가져 왔습니까?

답변

9

SQLite는 처음에 쿼리를 처리 할 때 모든 행을 "가져 오지"않습니다. 준비된 쿼리가 계승 될 때마다 단일 행을 반환합니다. 행의 수를 얻을 수 FUNC sqlite3를 자주 묻는 질문 here

Q)에서

?

가) 결과 집합의 행 수를 검색하는 기능이 없습니다. SQLite는 숫자를 미리 알지 못하지만 테이블을 반복하면서 행을 반환합니다. 응용 프로그램은 모든 성공적인 sqlite3_step()에서 필요에 따라 행 카운터를 증가시킬 수 있습니다.

일부 랩퍼는 메모리 테이블의 결과 집합에있는 모든 행을 수집 할 수 있으므로 행 수를 반환 할 수 있습니다.

당신은 항상 특정 SELECT 문이 어떤 성능의 비용으로 반환되는 행의 수를 얻을 수 있습니다 : 당신은/삭제 행을 삽입에서 다른 연결을 방지하기 위해 트랜잭션이 포장해야

BEGIN IMMEDIATE TRANSACTION; 
SELECT COUNT(*) FROM x WHERE y; 
SELECT a,b,c FROM x WHERE y; 
ROLLBACK TRANSACTION; 

을 두 SELECT 문 사이.

+0

우수한 답변을 주셔서 감사합니다. 그 결과로 어떤 일이 더 명확하게 이루어졌으며 정확히 무엇을해야하는지 알려주 었습니다. – Andrew

관련 문제