| PostgreSQL 9.1.24 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.1 : 스포츠 토토 베트맨 함수 | 위로 | 42장. PL/Python - Python 절차 언어 | 다음 | |
PL/Python 언어 모듈은 자동으로 Python을 가져옵니다 호출된 모듈plpy. 토토 결과과 이 모듈의 상수는 Python 코드에서 사용할 수 있습니다. 와 같이plpy.foo.
그plpy모듈은 두 가지를 제공합니다.
호출된 함수실행그리고준비. 전화 중plpy.execute쿼리 문자열과
선택적 제한 인수로 인해 해당 쿼리가 실행되고
결과 개체에 결과가 반환됩니다. 결과 객체
목록 또는 사전 개체를 에뮬레이트합니다. 결과 개체는 다음과 같습니다.
행 번호와 열 이름으로 액세스합니다. 여기에는 이러한 추가 기능이 있습니다.
방법:nrows다음을 반환합니다.
쿼리에서 반환된 행 수 및상태이것은SPI_execute()반환값. 결과 객체
수정될 수 있습니다.
예:
rv = plpy.execute("SELECT * FROM my_table", 5)
다음에서 최대 5개의 행을 반환합니다.my_table. 만일내_테이블열이 있습니다my_column, 다음과 같이 액세스됩니다.
foo = rv[i]["my_column"]
두 번째 토토 결과,plpy.prepare, 실행 계획을 준비합니다.
쿼리. 쿼리 문자열과 목록을 사용하여 호출됩니다.
매개변수 유형(쿼리에 매개변수 참조가 있는 경우)
예를 들어:
plan = plpy.prepare("SELECT last_name FROM my_users WHERE first_name = $1", [ "text" ])
텍스트변수 유형입니다.
당신은 지나가게 될 것입니다$1. 이후
명세서를 준비하면서 함수를 사용합니다.plpy.execute실행하려면:
rv = plpy.execute(계획, [ "이름" ], 5)
세 번째 인수는 한계이며 선택사항입니다.
쿼리 매개변수 및 결과 행 필드는 다음 사이에서 변환됩니다. 다음에 설명된 PostgreSQL 및 Python 데이터 유형섹션 42.3. 예외는 복합 유형은 현재 지원되지 않습니다. 쿼리 매개변수로 거부되며 다음과 같은 경우 문자열로 변환됩니다. 쿼리 결과에 나타납니다. 후자에 대한 해결 방법으로 문제가 발생하면 쿼리를 다시 작성하여 복합 유형 결과는 결과 행의 필드입니다. 또는 결과 문자열 손으로 분석할 수 있지만 이 접근 방식은 그렇지 않습니다. 미래에도 사용할 수 없기 때문에 권장됩니다.
PL/Python 모듈을 사용하여 계획을 준비할 때 자동으로 저장됩니다. SPI 문서 읽기(43장) 이 내용에 대한 설명은 의미합니다. 이를 토토 결과 전반에 걸쳐 효과적으로 활용하려면 영구 저장소 중 하나를 사용해야 하는 호출 사전SD또는GD(참조토토 사이트 추천 :). 예를 들면:
CREATE FUNCTION 사용savedplan() $$로 트리거 반환
SD.has_key("계획")인 경우:
계획 = SD["계획"]
그 외:
계획 = plpy.prepare("SELECT 1")
SD["계획"] = 계획
# 나머지 기능
$$ 언어 plpythonu;
데이터베이스에 접근하는 함수에 오류가 발생할 수 있습니다.
이로 인해 중단되고 예외가 발생합니다. 둘 다plpy.execute그리고plpy.prepare의 인스턴스를 발생시킬 수 있습니다
하위클래스plpy.SPIError,
기본값은 토토 결과을 종료합니다. 이 오류는 처리될 수 있습니다.
다른 Python 예외와 마찬가지로시도/제외구조물. 예를 들면:
CREATE FUNCTION try_adding_joe() 텍스트를 $$로 반환합니다.
시도해 보세요:
plpy.execute("INSERT INTO users(사용자 이름) VALUES ('joe')")
plpy.SPIError 제외:
"뭔가 잘못됐어" 반환
그 외:
"Joe가 추가했습니다"를 반환합니다.
$$ 언어 plpythonu;
발생되는 예외의 실제 클래스는 해당됩니다. 오류를 일으킨 특정 조건에 대해 설명합니다. 참조표 A-1가능한 조건 목록을 확인하세요. 모듈plpy.spiExceptions예외 클래스를 정의합니다. 각각에 대해PostgreSQL조건, 조건 이름에서 이름을 파생합니다. 예를 들어,division_by_zero되다DivisionByZero, unique_violation되다고유 위반, fdw_error되다FdwError등. 이러한 예외는 각각 클래스는 다음에서 상속됩니다.SPI오류. 이 분리하면 특정 오류를 더 쉽게 처리할 수 있습니다. 인스턴스:
CREATE FUNCTION insert_fraction(분자 정수, 분모 정수) 텍스트를 $$로 반환합니다.
plpy import spiExceptions에서
시도해 보세요:
plan = plpy.prepare("분수 삽입(frac) VALUES ($1 / $2)", ["int", "int"])
plpy.execute(계획, [분자, 분모])
spiExceptions.DivisionByZero 제외:
"분모는 0과 같을 수 없습니다."를 반환합니다.
spiExceptions.UniqueViolation 제외:
"이미 해당 부분이 있습니다"를 반환합니다.
plpy.SPIError 제외, e:
"기타 오류, SQLSTATE %s" % e.sqlstate를 반환합니다.
그 외:
"분수 삽입됨"을 반환합니다.
$$ 언어 plpythonu;
다음의 모든 예외가 발생하므로 주의하세요.plpy.spiExceptions모듈 상속 대상SPI오류, an제외이를 처리하는 절은 모든 것을 포착합니다. 데이터베이스 토토 결과 오류입니다.
다른 오류를 처리하는 대체 방법 조건에 따라 다음을 잡을 수 있습니다.SPI오류예외 및 내부의 특정 오류 조건을 확인제외다음을 보고 차단sqlstate예외 속성 개체. 이 속성은를 포함하는 문자열 값입니다."SQLSTATE"오류 코드. 이 접근법 거의 동일한 토토 결과을 제공합니다