롤 토토 : 문서 : 9.5 : 롤 토토 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.5 : 젠 토토 함수 | PostgreSQL : 문서 : 9.5 : PL/토토 사이트 -토토 사이트 Prossural Language | CHAPTER 43. PL/PYTHON -PYTHON PROCESURAL LA롤 토토UAGE | 토토 커뮤니티 : 문서 : 9.5 : 토토 커뮤니티 적 서브 토토 커뮤니티 |
PL/Python La롤 토토uage Module이 자동으로 호출 된 파이썬 모듈을 가져옵니다plpy. 이 모듈의 기능과 상수는 파이썬 코드에서 re에서 사용할 수 있습니다.plpy.foo.
plpy모듈은 롤 토토베이스 명령을 실행하기위한 몇 가지 기능을 제공합니다.
execute
(쿼리[,Max-Rows])전화plpy.execute
쿼리 문자열과 선택적 행 제한 인수는 쿼리가 실행되고 결과가 결과 오브젝트에서 반환됩니다..
결과 객체는 목록 또는 사전 객체를 에뮬레이션합니다. 결과 객체는 행 번호와 열 이름으로 액세스 할 수 있습니다. 예를 들어:
rv = plpy.execute ( "select * from my_table", 5)
최대 5 행까지my_table. 만약에my_table열이 있습니다my_column, 그것은 다음과 같이 액세스 할 것입니다.
foo = rv [i] [ "my_column"]
내장을 사용하여 반환 된 행 수를 얻을 수 있습니다Len
기능.
결과 객체에는 다음과 같은 추가 방법이 있습니다.
nrows
()명령에 의해 처리 된 행 수를 반환합니다. 이것은 반드시 반환 된 행 수와 반드시 동일하지는 않습니다. 예를 들어, an업롤 토토트명령은이 값을 설정하지만 행을 반환하지 않습니다 (반환사용).
상태
()spi_execute ()
반환 값.
colnames
()Coltypes
()ColtypMods
()열 이름 목록, 열 유형 OID 목록 및 열에 대한 유형 별 유형 수정 자 목록을 반환합니다..
이 메소드는 결과 세트를 생성하지 않은 명령에서 결과 객체를 호출 할 때 예외를 제기합니다 (예 :업롤 토토트없음반환또는드롭 테이블. 그러나 제로 행이 포함 된 결과 세트에서 이러한 방법을 사용해도 괜찮습니다.
__str__
()표준__str__메소드가 정의되어 예를 들어 쿼리 실행 결과를 디버그하여plpy.debug (rv).
결과 객체를 수정할 수 있습니다.
plpy.execute전체 결과가 메모리에 읽히도록합니다. 결과 세트가 비교적 작다는 것을 확신 할 때만 해당 기능 만 사용하십시오. 큰 결과를 가져올 때 과도한 메모리 사용을 위험에 빠뜨리고 싶지 않다면 사용plpy.cursor대신plpy.execute.
준비
(쿼리[,Argtypes])execute
(plan[,인수[,Max-Rows]])plpy.prepare
쿼리에 대한 실행 계획을 준비합니다. 쿼리에 매개 변수 참조가있는 경우 쿼리 문자열과 매개 변수 유형 목록으로 호출됩니다. 예를 들어:
plan = ply.prepare ( "first_name = $ 1", [ "text"]
텍스트전달할 변수의 유형은입니다.$ 1. 두 번째 인수는 쿼리에 매개 변수를 전달하지 않으려면 선택 사항입니다.
진술을 준비한 후에는 함수 변형을 사용합니다plpy.execute
실행하려면 :
rv = plpy.execute (plan, [ "name"], 5)
계획을 쿼리 문자열 대신 첫 번째 인수로 전달하고 값 목록을 두 번째 인수로 쿼리로 대체합니다. 두 번째 인수는 쿼리가 매개 변수를 기대하지 않으면 선택 사항입니다. 세 번째 인수는 이전과 같은 선택적 행 제한입니다.
쿼리 매개 변수 및 결과 행 필드는 PostgreSQL과 Python Data 유형으로 변환됩니다.롤 토토 : 문서 : 9.5 : 데이터 값.
PL/Python 모듈을 사용하여 계획을 준비하면 자동으로 저장됩니다. SPI 문서 읽기 (PostgreSQL : 문서 : 9.5 : 서버 프로그래밍 토토) 이것이 의미하는 바에 대한 설명. 이 기능을 효과적으로 사용하려면 기능 통화를 위해 지속적인 스토리지 사전 중 하나를 사용해야합니다.SD또는gd(참조PostgreSQL : 문서 : 9.5 : 사설 토토 사이트 공유). 예를 들어:
함수 만들기 audavedPlan ()는 트리거를 $$로 반환합니다 SD에서 "계획"인 경우 : plan = sd [ "Plan"] 또 다른: plan = ply.prepare ( "Select 1") sd [ "plan"] = 계획 # 나머지 기능 $$ 언어 plythonu;
커서
(쿼리)커서
(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])) 리턴 렌 (행) $$ 언어 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각각의 예외 클래스 정의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"오류 코드. 이 접근법은 거의 동일한 기능을 제공합니다