이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다토토 결과 : 문서 : 17 : 44.6. 토토 결과 액세스버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

42.7. 데이터베이스 토토 결과

PL/Python 언어 모듈은 파이썬을 자동으로 가져옵니다 호출 된 모듈plpy. 토토 결과과 이 모듈의 상수는 파이썬 코드에서 사용할 수 있습니다. 처럼plpy.foo.

42.7.1. 데이터베이스 토토 결과 기능

theplpy모듈은 두 개를 제공합니다 호출 된 토토 결과execute준비. 부름plpy.execute쿼리 문자열과 an 선택적 한계 인수는 해당 쿼리가 실행되고 결과 객체에서 결과가 반환됩니다. 결과 객체 목록 또는 사전 개체를 모방합니다. 결과 객체는 될 수 있습니다 행 번호와 열 이름으로 토토 결과합니다. 이 추가 기능이 있습니다 행동 양식:nrows쿼리에 의해 반환 된 행 수와상태spi_execute ()반환 값. 결과 객체 수정할 수 있습니다.

예 :

rv = plpy.execute ( "select * from my_table", 5)

최대 5 행까지my_table. 만약에my_table열이 있습니다my_column, 그것은 다음과 같이 액세스 할 것입니다.

foo = rv [i] [ "my_column"]

두 번째 함수,plpy.prepare, 실행 계획을 준비합니다 쿼리. 쿼리 문자열과 목록으로 호출됩니다. 매개 변수 유형, 쿼리에 매개 변수 참조가있는 경우 예를 들어:

plan = ply.prepare ( "first_name = $ 1", [ "text"]) 어디서 my_users에서 last_name을 선택하십시오.

텍스트는 변수의 유형입니다 당신은 전달 될 것입니다$ 1. 후에 진술 준비, 당신은 함수를 사용합니다plpy.execute실행하려면 :

rv = plpy.execute (plan, [ "name"], 5)

세 번째 인수는 한계이며 선택 사항입니다.

쿼리 매개 변수 및 결과 행 필드가 변환됩니다 postgresql 및 python 토토 결과 유형에 설명 된대로섹션 42.3. 예외입니다 복합 유형은 현재 지원되지 않습니다 쿼리 매개 변수로 거부되고 문자열로 변환됩니다. 쿼리 결과에 나타납니다. 후자의 해결 방법으로 문제, 쿼리를 때때로 다시 작성하여 복합 유형 결과는 결과 행의 필드. 또는 결과 문자열입니다 손으로 분리 될 수 있지만이 접근법은 아닙니다. 미래가 방해받지 않기 때문에 권장됩니다.

PL/Python 모듈을 사용하여 계획을 준비 할 때 자동으로 저장되었습니다. SPI 문서 읽기 (43 장) 이것에 대한 설명 수단. 토토 결과 전체에 효과적으로 사용하기 위해 통화는 영구 스토리지 중 하나를 사용해야합니다. 사전SD또는gd(참조토토 사이트 추천 :). 예를 들어:

함수 만들기 audavedPlan ()는 트리거를 $$로 반환합니다
    sd.has_key ( "plan") 인 경우 :
        plan = sd [ "Plan"]
    또 다른:
        plan = ply.prepare ( "Select 1")
        sd [ "plan"] = 계획
    # 나머지 토토 결과
$$ 언어 plythonu;

42.7.2. 트래핑 오류

데이터베이스에 토토 결과하는 기능 오류가 발생할 수 있습니다. 이로 인해 그들이 중단하고 예외를 제기하게됩니다. 둘 다plpy.execute​​plpy.preparea의 인스턴스를 올릴 수 있습니다 의 서브 클래스plpy.spierror기본값은 함수를 종료합니다. 이 오류는 처리 할 수 ​​있습니다 다른 파이썬 예외와 마찬가지로 사용하여시도/제외구성. 예를 들어:

기능 작성 try_adding_joe () 텍스트를 $$로 반환합니다
    노력하다:
        plpy.execute ( "사용자에 삽입 (사용자 이름) 값 ( 'joe')")
    plpy.spierror를 제외하고 :
        "무언가가 잘못되었다"는 반환
    또 다른:
        "Joe Add"반환
$$ 언어 plythonu;

제기되는 예외의 실제 클래스는 해당합니다 오류를 일으킨 특정 조건에. 참조표 A-1가능한 조건 목록. 모듈plpy.spiexceptions예외 클래스를 정의합니다 각각PostgreSQL조건, 조건 이름에서 이름을 도출합니다. 예를 들어,division_by_zeroDivisionByzero, 고유 _violation독창적 인 범위, fdw_errorfdwerror등. 이러한 각 예외 클래스는에서 물려받습니다.Spierror. 이것 분리하면 특정 오류를보다 쉽게 ​​처리 할 수 ​​있습니다 사례:

함수 생성 insert_fraction (숫자 int, denominator int) 텍스트를 $$로 반환합니다.
plpy import spiexceptions에서
노력하다:
    plan = ply.prepare ( "FRAC (Fractions) 값 ($ 1 / $ 2)", [ "int", "int"]))))
    plpy.execute (plan, [숫자, 분모])
spiexceptions.divisionbyzero :
    "분모는 0과 같을 수 없다"는 반환
spiexections 제외.
    "이미 그 분수가있다"는 반환
plpy.spierror를 제외하고 E :
    "기타 오류, sqlstate % s" % e.sqlstate를 반환합니다
또 다른:
    "분수 삽입"반환
$$ 언어 plythonu;

plpy.spiexceptions모듈 상속Spierror, an제외조항 처리는 그것을 잡을 것입니다 데이터베이스 토토 결과 오류.

다른 오류를 처리하는 대체 방법으로 조건, 당신은를 잡을 수 있습니다Spierror예외 및 내부의 특정 오류 조건을 결정합니다제외sqlstate예외의 속성 물체. 이 속성은를 포함하는 문자열 값입니다."Sqlstate"오류 코드. 이 접근법 거의 동일한 토토 결과을 제공