45.3. 데이터 값

일반적으로 pl/python의 목표는 a를 제공하는 것입니다.천연사설 토토 사이트과 Python Worlds 간의 매핑. 이것은 아래에 설명 된 데이터 매핑 규칙을 알려줍니다.

45.3.1. 데이터 유형 매핑

PL/Python 함수가 호출되면 인수는 사설 토토 사이트 데이터 유형에서 해당 Python 유형으로 변환됩니다.

  • 사설 토토 사이트부울Python으로 변환bool.

  • 사설 토토 사이트smallintandintPython으로 변환int. 사설 토토 사이트bigintandOIDLongPython 2에서int106사설 토토 사이트 : 문서 : 13 : 45.3. 데이터 값58

  • 사설 토토 사이트Realand더블Python으로 변환float.

  • 사설 토토 사이트숫자Python으로 변환10 진수. 이 유형은에서 가져옵니다cdecimal사용 가능한 경우 패키지. 그렇지 않으면,Decimal.decimal표준 라이브러리에서 사용됩니다.cdecimal보다 훨씬 빠릅니다십진. 그러나 파이썬 3.3 이상에서cdecimal이름으로 표준 라이브러리에 통합되었습니다Decimal, 더 이상 차이가 없습니다.

  • 사설 토토 사이트BYTEAPython으로 변환strPython 2에서바이트Python 3. Python 2에서 문자열은 문자 인코딩없이 바이트 시퀀스로 취급되어야합니다..

  • 사설 토토 사이트 문자열 유형을 포함한 기타 모든 데이터 유형은 Python으로 변환됩니다str. Python 2에서는이 문자열이 사설 토토 사이트 서버 인코딩에 있습니다. Python 3에서는 모든 문자열과 같은 유니 코드 문자열입니다.

  • Nonscalar 데이터 유형은 아래를 참조하십시오.

pl/python 함수가 반환되면 반환 값이 다음과 같이 함수의 선언 된 사설 토토 사이트 리턴 데이터 유형으로 변환됩니다.

  • 사설 토토 사이트 반환 유형이부울, 반품 값은 진실에 대해 평가됩니다.Python규칙. 즉, 0이고 빈 문자열은 거짓이지만 특히'f'진실입니다.

  • 사설 토토 사이트 반환 유형이있을 때BYTEA, 리턴 값은 각각의 Python 내장 인을 사용하여 문자열 (Python 2) 또는 바이트 (Python 3)로 변환되며 결과는로 변환됩니다.BYTEA.

  • 다른 모든 사설 토토 사이트 리턴 유형의 경우, 반환 값은 Python 내장을 사용하여 문자열로 변환됩니다str, 결과는 사설 토토 사이트 데이터 유형의 입력 함수로 전달됩니다. (Python 값이 A 인 경우float,를 사용하여 변환됩니다.Repr대신 내장str, 정밀도 손실을 피하기 위해.)

    Python 2의 문자열은 사설 토토 사이트로 전달 될 때 사설 토토 사이트 서버 인코딩에 있어야합니다. 현재 서버 인코딩에서 유효하지 않은 문자열은 오류가 발생하지만 모든 인코딩 불일치가 감지 될 수는 없으므로 가비지 데이터가 올바르게 수행되지 않을 때 여전히 발생할 수 있습니다. 유니 코드 문자열은 올바른 인코딩으로 자동으로 변환되므로 더 안전하고 사용하는 것이 더 편리 할 수 있습니다. Python 3에서는 모든 문자열이 유니 코드 문자열입니다.

  • Nonscalar 데이터 유형은 아래를 참조하십시오.

선언 된 사설 토토 사이트 반환 유형과 실제 반환 객체의 Python 데이터 유형 사이의 논리적 불일치는 플래그가 지정되지 않았다. 값은 어쨌든 변환됩니다.

45.3.2. null, 없음

SQL 널 값인 경우함수로 전달되면 인수 값이로 나타납니다.없음파이썬에서. 예를 들어,의 함수 정의Pymax표시PostgreSQL : 문서 : 13 : 45.2. pl/토토 사이트 순위 functionsNULL 입력에 대한 잘못된 답변을 반환합니다. 우리는 추가 할 수 있습니다엄격한사설 토토 사이트더 합리적인 일을하십시오 : 널 값이 전달되면 함수는 전혀 호출되지 않지만 자동으로 널 결과를 반환합니다. 또는 기능 본문에서 NULL 입력을 확인할 수 있습니다.

기능 생성 Pymax (A Integer, B Integer)
  정수를 반환합니다
$$로
  (a는 없음) 또는 (b는 없음)이면 :
    반환 없음
  A B :
    반환 a
  반환 b
$$ 언어 plythonu;

위와 같이, pl/python 함수에서 SQL null 값을 반환하려면 값을 반환없음. 기능이 엄격한 지 여부에 관계없이 수행 할 수 있습니다.

45.3.3. 배열, 목록

SQL 어레이 값은 Python 목록으로 PL/Python으로 전달됩니다. PL/Python 함수에서 SQL 배열 값을 반환하려면 Python 목록을 반환하십시오.

함수 만들기 return_arr ()
  int []를 반환합니다.
$$로
반환 [1, 2, 3, 4, 5]
$$ 언어 plpythonu;

return_arr ()를 선택하십시오.
 return_arr  
-------------
 1,2,3,4,5

다차원 배열은 중첩 된 파이썬 목록으로 PL/Python으로 전달됩니다. 예를 들어 2 차원 배열은 목록 목록입니다. PL/Python 함수에서 다차원 SQL 어레이를 반환 할 때 각 레벨의 내부 목록은 모두 같은 크기 여야합니다. 예를 들어:

함수 만들기 test_type_conversion_array_int4 (x int4 [])는 int4 []를 $$로 반환합니다
plpy.info (x, type (x))
반환 x
$$ 언어 plpythonu;

test_type_conversion_array_int4에서 * 선택 * [[1,2,3], [4,5,6]]);
정보 : ([[1, 2, 3], [4, 5, 6], <type 'list')
 test_type_conversion_array_int4 
--------------------------------------------
 1,2,3, 4,5,6

튜플과 같은 다른 파이썬 시퀀스는 다차원 배열이 지원되지 않았을 때 사설 토토 사이트 버전 9.6 이하의 후진 호환성을 위해 허용됩니다. 그러나 복합 유형에 모호하기 때문에 항상 1 차원 배열로 취급됩니다. 마찬가지로, 복합 유형이 다차원 배열에서 사용될 때, 목록이 아닌 튜플로 표시되어야합니다.

파이썬에서 문자열은 시퀀스이며, 이는 파이썬 프로그래머에게 친숙 할 수있는 바람직하지 않은 효과를 가질 수 있습니다 :

함수 만들기 return_str_arr ()
  varchar []를 반환합니다.
$$로
"안녕하세요"반환
$$ 언어 plpythonu;

return_str_arr ()를 선택하십시오.
 return_str_arr
---------------
 안녕하세요

45.3.4. 복합 유형

복합 유형 인수는 Python 매핑 기능으로 전달됩니다. 매핑의 요소 이름은 복합 유형의 속성 이름입니다. 전달 된 행의 속성에 NULL 값이 있으면 값이 있습니다.없음매핑에서. 예는 다음과 같습니다.

테이블 직원 만들기 (
  이름 텍스트,
  급여 정수,
  시대 정수
);

기능 초과 지불 (E 직원) 생성
  부울을 반환합니다
$$로
  E [ "급여"] 200000 :
    진실을 반환하십시오
  if (e [ "age"] <30) 및 (e [ "Salary"] 100000) :
    진실을 반환하십시오
  거짓을 반환하십시오
$$ 언어 plythonu;

파이썬 함수에서 행 또는 복합 유형을 반환하는 방법에는 여러 가지가 있습니다. 다음 예는 다음과 같이 가정합니다.

유형을 만들어 afform as (
  이름 텍스트,
  가치 정수
);

복합 결과는 a :로 반환 할 수 있습니다.

시퀀스 유형 (튜플 또는 목록이지만 색인이 없기 때문에 세트는 아닙니다)

반환 된 시퀀스 객체는 복합 결과 유형에 필드가있는 것과 동일한 수의 항목을 가져야합니다. 인덱스 0이있는 항목은 복합 유형의 첫 번째 필드, 1에서 두 번째 등에 할당됩니다. 예를 들어:

함수 만들기 make_pair (이름 텍스트, 가치 정수)
  이름을 name_value를 반환합니다
$$로
  반환 (이름, 값)
  # 또는 또는 목록으로 : 반환 [이름, 값]
$$ 언어 plythonu;

모든 열에 대한 SQL NULL을 반환하려면 삽입없음해당 위치에서.

복합 유형 배열이 반환되면 Python 목록이 복합 유형을 나타내는지 또는 다른 배열 차원을 나타내 든 모호하기 때문에 목록으로 반환 할 수 없습니다..

매핑 (사전)

각 결과 유형 열의 값은 열 이름을 키로 매핑에서 검색됩니다. 예:

함수 만들기 make_pair (이름 텍스트, 값 정수)
  이름을 name_value를 반환합니다
$$로
  return  "name": name, "value": value

추가 사전 키/값 쌍은 무시됩니다. 누락 된 키는 오류로 취급됩니다. 모든 열의 SQL NULL 값을 반환하려면 삽입없음해당 열 이름을 키로 사용합니다.

개체 (모든 객체 제공 방법__getattr__)

이것은 매핑과 동일하게 작동합니다. 예:

함수 만들기 make_pair (이름 텍스트, 가치 정수)
  이름을 name_value를 반환합니다
$$로
  Class Named_value :
    def __init__ (self, n, v) :
      self.name = n
      self.value = v
  RETURN NAMED_VALUE (이름, 값)

  # 또는 간단히
  클래스 NV : 패스
  nv.name = 이름
  nv.value = value
  반환 nv
$$ 언어 plythonu;

기능out매개 변수도 지원됩니다. 예를 들어:

함수 만들기 multiout_simple (out I Integer, out j Integer) $$
반환 (1, 2)
$$ 언어 plpythonu;

multiout_simple ()에서 *를 선택하십시오.

절차의 출력 매개 변수는 같은 방식으로 다시 전달됩니다. 예를 들어:

절차 생성 Python_triple (Integer, Inout B Integer) $$
반환 (A * 3, B * 3)
$$ 언어 plpythonu;

python_triple (5, 10); 전화하십시오.

45.3.5. 설정 기능 설정

apl/python함수는 스칼라 또는 복합 유형 세트를 반환 할 수도 있습니다. 반환 된 객체가 내부적으로 반복자로 바뀌기 때문에이를 달성하는 방법에는 여러 가지가 있습니다. 다음 예제는 복합 유형이 있다고 가정합니다.

타입 인사말 생성 AS (
  텍스트,
  누가 문자
);

세트 결과는 a :에서 반환 할 수 있습니다.

시퀀스 유형 (튜플, 목록, 세트)
기능 생성 인사말 (텍스트 방법)
  정해진 인사말을 반환합니다
$$로
  # 복합 유형으로 목록을 포함하는 튜플 리턴
  # 다른 모든 조합도 작동합니다
  return ([How, "World"], [How, "Postgresql"], [How, "Pl/Python"]))))
$$ 언어 plythonu;
반복자 (모든 객체 제공__iter__and다음방법)
기능 생성 인사말 (텍스트 방법)
  정해진 인사말을 반환합니다
$$로
  클래스 프로듀서 :
    def __init__ (자기, 방법, 누가) :
      self.how = 방법
      self.ho = 누가
      self.ndx = -1

    def __iter__ (self) :
      자아를 반환하십시오

    def next (self) :
      self.ndx += 1
      if self.ndx == len (self.who) :
        중지를 높이십시오
      return (self.how, self.who [self.ndx])

  리턴 프로듀서 (How, [ "World", "Postgresql", "Pl/Python"]))))
$$ 언어 plythonu;
Generator (수율)
기능 생성 인사말 (텍스트 방법)
  정해진 인사말을 반환합니다
$$로
  [ "World", "Postgresql", "pl/python"]의 사람을 위해 :
    수율 (어떻게, 누가)
$$ 언어 plythonu;

|out매개 변수 (사용setof record 반환)도 지원됩니다. 예를 들어:

함수 만들기 multiout_simple_setof (n Integer, Out Integer, Out Integer)는 record를 $$로 반환합니다.
반환 [(1, 2)] * n
$$ 언어 plpythonu;

multiout_simple_setof (3);에서 *를 선택하십시오.

정정 제출

문서에 맞지 않는 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면