2012-06-08 5 views
3

psql 클라이언트를 통해이 SQL 쿼리를 실행하면 수초 (~ 90 초, 거대한 테이블 이후로 정상입니다)로 실행되고 리턴됩니다. 내 라인이 성공적으로 삽입되었는지 확인할 수 있습니다.cursort.execute/cursor.callproc는 아무런 에러도 반환하지 않지만 아무 것도 실행되지 않습니다.

SELECT merge_data('898989', '111111111', '10000') 

UPDATE 또는 INSERT를 실행하는 저장 프로 시저이므로 프로 시저가 오류없이 실행되고 테이블에 항목을 가져옵니다.

python 프로그램에서 동일한 작업을 시도하면 쿼리는 2 초가 걸리고 오류가 반환되지 않고 테이블에 아무 것도 표시되지 않습니다. 당신은 실제로 SQL을 실행하기 위해 cursor.execute()를 호출하지 않는

conn = psycopg2.connect("...") 
cursor = conn.cursor() 

try: 
    cursor.callproc("merge_data", ['898989', '111111111', '10000']) 
except: 
    print "ERROR !" 

cursor.close() 

답변

4

해결되었습니다.

기본적으로 psycopg2는 실행 된 각 명령문에서 자동 커밋을하지 않으므로 연결을 종료하면 (마지막에) 보류중인 모든 트랜잭션은 ROLLBACK이 수행 된 것처럼 삭제됩니다.

하나 어쨌든 각 cursor.execute() 또는 .callproc conn.commit 후()를 호출하거나

conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) 
-3

: 정보, 명령문이 성공적으로 (내가 pgSQL의 로그를 볼 수 있습니다) 백업 postgresqk에서 실행되고, 여기에 내 코드입니다.

+0

cursor.callproc을 사용하여 전역 범위를 설정() 문장을 실행하고있다 심지어 cursor.execute ("SELECT merge_date ....") 같은 효과가 있습니다 –