PL/Python Language Module이 자동으로 호출 된 Python 모듈을 가져옵니다plpy
. 이 모듈의 기능과 상수는 파이썬 코드에서 re에서 사용할 수 있습니다.plpy.
.foo
theplpy
모듈은 토토 꽁 머니베이스 명령을 실행하기위한 몇 가지 기능을 제공합니다.
plpy.execute
(쿼리
[,Limit
])
전화plpy.execute
쿼리 문자열과 선택적 행 제한 인수는 쿼리가 실행되고 결과가 결과 오브젝트에서 반환됩니다..
ifLimit
지정되어 있고 0보다 크면plpy.execute
최대 검색Limit
행, 쿼리에 a가 포함 된 것처럼Limit
절. 생략Limit
또는 0으로 지정하면 행 제한이 없습니다.
결과 객체는 목록 또는 사전 객체를 에뮬레이션합니다. 결과 객체는 행 번호와 열 이름으로 액세스 할 수 있습니다. 예를 들어:
rv = plpy.execute ( "select * from my_table", 5)
최대 5 행까지my_table
. 만약에my_table
열이 있습니다my_column
, 그것은 다음과 같이 액세스 할 것입니다 :
foo = rv [i] [ "my_column"]
내장을 사용하여 반환 된 행 수를 얻을 수 있습니다Len
기능.
결과 객체에는 다음과 같은 추가 방법이 있습니다.
nrows
()
명령에 의해 처리 된 행 수를 반환합니다. 이것은 반드시 반환 된 행 수와 반드시 동일하지는 않습니다. 예를 들어, an업데이트
명령은이 값을 설정하지만 행을 반환하지 않습니다 (반환
사용).
상태
()
thespi_execute ()
반환 값.
Colnames
()
Coltypes
()
ColtypMods
()
열 이름 목록, 열 유형 OID 목록 및 열에 대한 유형 별 유형 수정 자 목록을 반환합니다..
이 메소드는 결과 세트를 생성하지 않은 명령에서 결과 객체를 호출 할 때 예외를 제기합니다 (예 :업데이트
없음반환
또는드롭 테이블
. 그러나 제로 행이 포함 된 결과 세트에서 이러한 방법을 사용해도 괜찮습니다.
__str__
()
표준__str__
메소드가 정의되어 예를 들어 쿼리 실행 결과를 디버깅 할 수 있도록plpy.debug (rv)
.
결과 객체를 수정할 수 있습니다.
전화plpy.execute
전체 결과가 메모리에 읽히도록합니다. 결과 세트가 비교적 작다는 것을 확신 할 때만 해당 기능 만 사용하십시오. 큰 결과를 가져올 때 과도한 메모리 사용을 위험에 빠뜨리고 싶지 않다면 사용plpy.cursor
보다는plpy.execute
.
plpy.준비
(쿼리
[,Argtypes
])
plpy.execute
(plan
[,인수
[,Limit
]])
plpy.prepare
쿼리에 대한 실행 계획을 준비합니다. 쿼리에 매개 변수 참조가있는 경우 쿼리 문자열과 매개 변수 유형 목록으로 호출됩니다. 예를 들어:
plan = ply.prepare ( "first_name = $ 1", [ "text"]
텍스트
전달할 변수의 유형입니다$ 1
. 두 번째 인수는 쿼리에 매개 변수를 전달하지 않으려면 선택 사항입니다.
진술을 준비한 후에는 함수 변형을 사용합니다plpy.execute
실행하려면 :
rv = plpy.execute (plan, [ "name"], 5)
계획을 쿼리 문자열 대신 첫 번째 인수로 전달하고 값 목록을 두 번째 인수로 쿼리로 대체합니다. 두 번째 인수는 쿼리가 매개 변수를 기대하지 않으면 선택 사항입니다. 세 번째 인수는 이전과 같은 선택적 행 제한입니다.
또는 또는 전화 할 수 있습니다execute
계획 개체의 메소드 :
rv = plan.execute ([ "name"], 5)
쿼리 매개 변수 및 결과 행 필드는 토토 꽁 머니과 Python Data 유형으로 변환됩니다.토토 사이트 순위 : 문서 : 14 : 46.3. 데이터.
PL/Python 모듈을 사용하여 계획을 준비하면 자동으로 저장됩니다. SPI 문서 읽기 (PostgreSQL : 문서 : 14 : 47 장 윈 토토 프로그래밍 윈) 이것이 의미하는 바에 대한 설명. 이 기능을 효과적으로 사용하려면 기능 통화를 위해 지속적인 스토리지 사전 중 하나를 사용해야합니다.SD
또는GD
(참조토토 사이트 추천 : 문서 : 14 : 46.4. 토토 꽁 머니 공유). 예를 들어:
함수 생성 audavedPlan () 트리거를 $$로 반환합니다 SD에서 "계획"인 경우 : plan = sd [ "Plan"] 또 다른: plan = ply.prepare ( "Select 1") sd [ "plan"] = 계획 # 나머지 기능 $$ 언어 plythonu;
plpy.커서
(쿼리
)
plpy.커서
(plan
[,인수
])
theplpy.cursor
함수는와 동일한 인수를 받아들입니다.plpy.execute
(행 제한 제외) 및 커서 객체를 반환하여 작은 덩어리에서 큰 결과 세트를 처리 할 수 있습니다. 와 마찬가지로plpy.execute
, 인수 목록과 함께 쿼리 문자열 또는 계획 개체 또는커서
함수는 계획 개체의 방법으로 호출 될 수 있습니다.
커서 객체는 a를 제공합니다.Fetch
정수 매개 변수를 수락하고 결과 객체를 반환하는 메소드. 전화 할 때마다Fetch
, 반환 된 객체에는 다음 행의 배치가 포함되어 있으며, 매개 변수 값보다 크지 않습니다. 모든 행이 소진되면Fetch
빈 결과 개체를 반환하기 시작합니다. 커서 객체도 제공합니다반복자 인터페이스, 모든 행이 소진 될 때까지 한 번에 한 줄을 산출합니다. 그러한 방식으로 가져온 데이터는 결과 객체로 반환되지 않고 사전으로, 각 사전은 단일 결과 행에 해당합니다.
큰 테이블에서 토토 꽁 머니를 처리하는 두 가지 방법의 예는 다음과 같습니다.
함수 작성 count_odd_iterator ()는 정수를 $$로 반환합니다 홀수 = 0 plpy.cursor의 행의 경우 ( "largetable에서 num을 선택하십시오") : 행 [ 'num'] % 2 인 경우 : 홀수 += 1 홀수를 반환하십시오 $$ 언어 plpythonu; COUNTE COUNT_ODD_FETCH (Batch_Size Integer)는 정수를 $$로 반환합니다 홀수 = 0 cursor = plpy.cursor ( "largetable에서 num을 선택") 사실이지만 : 행 = cursor.fetch (batch_size) 행이 아닌 경우 : 부서지다 행으로 줄 : 행 [ 'num'] % 2 인 경우 : 홀수 += 1 홀수를 반환하십시오 $$ 언어 plpythonu; 함수 count_odd_prepared () 정수를 $$로 반환합니다 홀수 = 0 plan = ply.prepare ( "num % $ 1 < 0", [ "Integer"])에서 largetable에서 num을 선택하십시오) 행 = list (ply.cursor (plan, [2])) # 또는 : = list (plan.cursor ([2])) 리턴 렌 (행) $$ 언어 plythonu;
커서가 자동으로 배치됩니다. 그러나 커서가 보유한 모든 리소스를 명시 적으로 릴리스하려면 사용하십시오.닫기
메소드. 닫으면 커서를 더 이상 가져올 수 없습니다.
|plpy.cursor
|Python Database API 사양. 그들은 이름을 제외하고는 공통점이 없습니다.
토토 꽁 머니베이스에 액세스하는 기능은 오류가 발생할 수 있으므로 중단하고 예외가 발생할 수 있습니다. 둘 다plpy.execute
andplpy.prepare
서브 클래스의 인스턴스를 올릴 수 있습니다plpy.spierror
, 기본적으로 함수를 종료합니다. 이 오류는 다른 파이썬 예외와 마찬가지로를 사용하여 처리 할 수 있습니다.시도/제외
구성. 예를 들어:
함수 만들기 try_adding_joe () 텍스트를 $$로 반환합니다 노력하다: plpy.execute ( "사용자에 삽입 (사용자 이름) 값 ( 'joe')") plpy.spierror를 제외하고 : "무언가가 잘못되었다"는 반환 또 다른: "Joe Add"반환 $$ 언어 plythonu;
제기되는 예외의 실제 클래스는 오류를 일으킨 특정 조건에 해당합니다. 참조표 A.1가능한 조건 목록. 모듈plpy.spiexceptions
각각의 예외 클래스를 정의합니다토토 꽁 머니조건, 조건 이름에서 이름을 도출합니다. 예를 들어,division_by_zero
DivisionByzero
, 고유 _violation
독창적 인 범위
, fdw_error
fdwerror
등. 이러한 각 예외 클래스는에서 상속됩니다.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”오류 코드. 이 접근법은 거의 동일한 기능을 제공합니다
문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면