2010-06-08 4 views
2

BEGIN;END; 사이에 여러 개의 선택 쿼리를 한꺼번에 실행하고 싶습니다.SQL이 BEGIN에서 데이터를 가져옵니다. ...; 종료; python에서 블록

psycopg2.ProgrammingError: no results to fetch 

가 어떻게 실제로이 방법으로 데이터를 얻을 수 있습니다 : 나는 오류, 그러나

cur = connection.cursor() 
cur.execute(""" 
BEGIN; 
SELECT ...; 
END;""") 
res = cur.fetchall() 

: 나는 다음과 같은 시도? 난 그냥 행에 많은 선택이있는 경우

마찬가지로, 난 단지 다시 최신의 데이터를 얻을. 모든 데이터를 가져올 수있는 방법이 있습니까?

답변

4

PostgreSQL은 실제로 하나의 명령에서 여러 결과 집합 반환을 지원하지 않습니다. 당신이 psql 프로그램이 입력을 전달하는 경우 :

BEGIN; 
SELECT ...; 
END; 

는 클라이언트 측이 분할 실제로 결과 집합을 반환에만 두 번째 세 개의 문을 실행합니다.

"BEGIN"와 "END"는 SQL 수준이 시작/트랜잭션을 완료하는 명령입니다. (이 작업을 수행하기 위해서는 더 낮은 수준의 프로토콜이있을 수 있지만 기억이 안납니다). 아마 직접 문제를보고 싶지는 않지만 드라이버 (psycopg2)가이를 처리하게하십시오. 예를 들어, Perl의 DBI에서는 연결시 AutoCommit => 0을 지정하고 내 첫 명령 전에 내재적으로 "BEGIN"을 발행합니다. 그리고 나서 "END"(또는 "COMMIT"등) $ dbh-> commit을 명시 적으로 호출 할 때; 당신이 뭔가를 선택하는 경우 나는

+0

아 좋아. 나는 단지 그것을 더 빠르게하고 싶었다. 그러나 그것이 3 개의 왕복 여행을 어떻게해서든지하기 때문에, 그것은 중요하지 않다. – Claudiu

0

... 같은 JDBC와 같은 다른 시스템뿐만 아니라 않기 때문에 파이썬의 DB-API는, 오히려 같이 작동 추측 당신은 어떤 DML 등을 수행하는 기능이없는 내가 알고있는 어떤 이유로 든 명시적인 거래를하지 않아도됩니다.

관련 문제