일반적으로 말하면, PL/Python의 목표는 다음을 제공하는 것입니다.“자연스러운”사설 토토 사이트과 Python 세계 간의 매핑. 이는 아래에 설명된 데이터 매핑 규칙을 알려줍니다.
PL/Python 함수가 호출되면 해당 인수는 사설 토토 사이트 데이터 유형에서 해당 Python 유형으로 변환됩니다.
사설 토토 사이트부울파이썬으로 변환됨부울.
포스트그레SQLsmallint그리고int파이썬으로 변환됩니다int. 포스트그레SQL비긴트그리고oid다음으로 변환됩니다.긴Python 2 및 tointPython 3에서.
포스트그레SQL진짜그리고더블파이썬으로 변환됩니다플로트.
사설 토토 사이트숫자파이썬으로 변환됨십진수. 이 유형은에서 가져옵니다.c십진수사용 가능한 경우 패키지. 그렇지 않으면,십진수.십진수표준 라이브러리의 내용이 사용됩니다.c십진수보다 훨씬 빠릅니다.십진수. 그러나 Python 3.3 이상에서는,c십진수다음 이름으로 표준 라이브러리에 통합되었습니다.십진수이므로 더 이상 차이가 없습니다.
포스트그레SQL바이테아파이썬으로 변환됨strPython 2 및 to바이트Python 3. Python 2에서 문자열은 문자 인코딩 없이 바이트 시퀀스로 처리되어야 합니다.
사설 토토 사이트 문자열 유형을 포함한 다른 모든 데이터 유형은 Python으로 변환됩니다.str. Python 2에서 이 문자열은 사설 토토 사이트 서버 인코딩에 포함됩니다. Python 3에서는 모든 문자열과 마찬가지로 유니코드 문자열이 됩니다.
비스칼라 데이터 유형에 대해서는 아래를 참조하세요.
PL/Python 함수가 반환되면 해당 반환 값은 다음과 같이 함수가 선언한 사설 토토 사이트 반환 데이터 유형으로 변환됩니다.
사설 토토 사이트 반환 유형이 다음과 같은 경우부울, 반환 값은 다음에 따라 참인지 평가됩니다.파이썬규칙. 즉, 0과 빈 문자열은 false이지만 특히'f'사실입니다.
사설 토토 사이트 반환 유형이 다음과 같은 경우바이테아, 반환 값은 해당 Python 내장 기능을 사용하여 문자열(Python 2) 또는 바이트(Python 3)로 변환되고 결과는 다음과 같이 변환됩니다.바이테아.
다른 모든 사설 토토 사이트 반환 유형의 경우 반환 값은 Python 내장을 사용하여 문자열로 변환됩니다.str, 결과는 사설 토토 사이트 데이터 유형의 입력 함수에 전달됩니다. (파이썬 값이 a인 경우플로트, 이는를 사용하여 변환됩니다.대표대신 내장str, 정밀도 손실을 방지합니다.)
Python 2의 문자열은 사설 토토 사이트에 전달될 때 사설 토토 사이트 서버 인코딩에 있어야 합니다. 현재 서버 인코딩에서 유효하지 않은 문자열은 오류를 발생시키지만 모든 인코딩 불일치를 감지할 수 있는 것은 아니므로 이 작업이 올바르게 수행되지 않으면 여전히 가비지 데이터가 발생할 수 있습니다. 유니코드 문자열은 자동으로 올바른 인코딩으로 변환되므로 이를 사용하는 것이 더 안전하고 편리할 수 있습니다. Python 3에서는 모든 문자열이 유니코드 문자열입니다.
비 스칼라 데이터 유형에 대해서는 아래를 참조하십시오.
선언된 사설 토토 사이트 반환 유형과 실제 반환 객체의 Python 데이터 유형 사이의 논리적 불일치는 플래그가 지정되지 않습니다. 어떤 경우에도 값이 변환됩니다.
SQL null 값인 경우함수에 전달되면 인수 값은 다음과 같이 표시됩니다.없음파이썬에서. 예를 들어, 다음의 함수 정의는파이맥스표시됨PostgreSQL : 문서 : 13 : 45.2. pl/토토 사이트 순위 functions널 입력에 대해 잘못된 답을 반환합니다. 추가할 수도 있습니다엄격만들 함수 정의에사설 토토 사이트좀 더 합리적인 조치를 취하세요. null 값이 전달되면 함수는 전혀 호출되지 않고 자동으로 null 결과를 반환합니다. 또는 함수 본문에서 null 입력을 확인할 수 있습니다.
CREATE FUNCTION pymax (a 정수, b 정수)
정수를 반환합니다.
AS $$
(a가 없음) 또는 (b가 없음)인 경우:
반환 없음
a b인 경우:
반환하다
b를 돌려주다
$$ 언어 plpythonu;
위에 표시된 대로 PL/Python 함수에서 SQL null 값을 반환하려면 해당 값을 반환합니다.없음. 이는 함수의 엄격한 여부와 관계없이 수행될 수 있습니다.
SQL 배열 값은 Python 목록으로 PL/Python에 전달됩니다. PL/Python 함수에서 SQL 배열 값을 반환하려면 Python 목록을 반환하세요.
함수 생성 return_arr() 반환 정수[] AS $$ [1, 2, 3, 4, 5]를 반환합니다. $$ 언어 plpythonu; SELECT return_arr(); return_arr ------------- 1,2,3,4,5
다차원 배열은 중첩된 Python 목록으로 PL/Python에 전달됩니다. 예를 들어 2차원 배열은 목록의 목록입니다. PL/Python 함수에서 다차원 SQL 배열을 반환할 때 각 수준의 내부 목록은 모두 동일한 크기여야 합니다. 예를 들어:
함수 생성 test_type_conversion_array_int4(x int4[]) $$로 int4[]를 반환합니다. plpy.info(x, 유형(x)) x를 반환 $$ 언어 plpythonu; SELECT * FROM test_type_conversion_array_int4(ARRAY[[1,2,3],[4,5,6]]); 정보: ([[1, 2, 3], [4, 5, 6]], <유형 '목록') test_type_conversion_array_int4 --------------------------------- 1,2,3,4,5,6
튜플과 같은 다른 Python 시퀀스도 다차원 배열이 지원되지 않는 경우 사설 토토 사이트 버전 9.6 이하와의 하위 호환성을 위해 허용됩니다. 그러나 복합 유형과 모호하므로 항상 1차원 배열로 처리됩니다. 같은 이유로 복합 유형이 다차원 배열에 사용되는 경우 목록이 아닌 튜플로 표현되어야 합니다.
Python에서 문자열은 Python 프로그래머에게 친숙할 수 있는 바람직하지 않은 효과를 가질 수 있는 시퀀스입니다.
함수 생성 return_str_arr() varchar[]를 반환합니다. AS $$ "안녕하세요"를 반환 $$ 언어 plpythonu; SELECT return_str_arr(); return_str_arr ---------------- 안녕하세요
복합 유형 인수는 Python 매핑으로 함수에 전달됩니다. 매핑의 요소 이름은 복합 유형의 속성 이름입니다. 전달된 행의 속성에 null 값이 있는 경우 값은 다음과 같습니다.없음매핑에 있습니다. 예는 다음과 같습니다.
CREATE TABLE 직원(
이름 텍스트,
급여 정수,
연령 정수
);
CREATE FUNCTION 초과 지급(e 직원)
반환 부울
AS $$
e["salary"] 200000인 경우:
True를 반환
if (e["age"] < 30) 및 (e["salary"] 100000):
True를 반환
거짓을 반환
$$ 언어 plpythonu;
Python 함수에서 행 또는 복합 유형을 반환하는 방법에는 여러 가지가 있습니다. 다음 예에서는 다음과 같이 가정합니다.
CREATE TYPE 명명된_값 AS( 이름 텍스트, 값 정수 );
복합 결과는 다음과 같이 반환될 수 있습니다.
반환된 시퀀스 객체에는 복합 결과 유형에 필드가 있는 것과 동일한 수의 항목이 있어야 합니다. 인덱스가 0인 항목은 복합 유형의 첫 번째 필드에 할당되고 1은 두 번째 필드에 할당되는 식입니다. 예를 들어:
CREATE FUNCTION make_pair(이름 텍스트, 값 정수) 명명된_값을 반환합니다. AS $$ 반환(이름, 값) # 또는 목록으로: return [ 이름, 값 ] $$ 언어 plpythonu;
모든 열에 대해 SQL null을 반환하려면 삽입없음해당 위치에.
복합 유형의 배열이 반환되면 Python 목록이 복합 유형을 나타내는지 아니면 다른 배열 차원을 나타내는지 모호하므로 목록으로 반환될 수 없습니다.
각 결과 유형 열의 값은 열 이름을 키로 사용하여 매핑에서 검색됩니다. 예:
CREATE FUNCTION make_pair(이름 텍스트, 값 정수) 명명된_값을 반환합니다. AS $$ return "이름": 이름, "값": 값
추가 사전 키/값 쌍은 무시됩니다. 누락된 키는 오류로 처리됩니다. 모든 열에 대해 SQL Null 값을 반환하려면 다음을 삽입하세요.없음해당 열 이름을 키로 사용합니다.
__getattr__)이것은 매핑과 동일하게 작동합니다. 예:
CREATE FUNCTION make_pair(이름 텍스트, 값 정수)
명명된_값을 반환합니다.
AS $$
클래스 이름_값:
def __init__ (self, n, v):
self.name = n
자기값 = v
명명된_값(이름, 값)을 반환합니다.
# 또는 단순히
클래스 NV: 통과
nv.name = 이름
nv.value = 값
네바다 반납
$$ 언어 plpythonu;
함수아웃매개변수도 지원됩니다. 예를 들어:
CREATE FUNCTION multiout_simple(OUT i 정수, OUT j 정수) AS $$ 반환 (1, 2) $$ 언어 plpythonu; SELECT * FROM multiout_simple();
프로시저의 출력 매개변수는 동일한 방식으로 다시 전달됩니다. 예를 들어:
CREATE PROCEDURE python_triple(INOUT a 정수, INOUT b 정수) AS $$ 반환 (a * 3, b * 3) $$ 언어 plpythonu; 호출 python_triple(5, 10);
A PL/파이썬함수는 스칼라 또는 복합 유형 세트를 반환할 수도 있습니다. 반환된 객체가 내부적으로 반복자로 변환되기 때문에 이를 달성하는 방법에는 여러 가지가 있습니다. 다음 예에서는 복합 유형이 있다고 가정합니다.
다음 유형의 인사말 작성( 어떻게 텍스트, 누가 문자를 보내? );
설정된 결과는 다음에서 반환될 수 있습니다:
CREATE FUNCTION 인사말(텍스트 방법) RETURN SETOF 인사말 AS $$ # 목록을 복합 유형으로 포함하는 튜플을 반환합니다. # 다른 모든 조합도 작동합니다 return ( [ 방법, "세계" ], [ 방법, "사설 토토 사이트" ], [ 방법, "PL/Python" ] ) $$ 언어 plpythonu;
__iter__그리고다음메서드)CREATE FUNCTION 인사말(텍스트 방법)
RETURN SETOF 인사말
AS $$
클래스 프로듀서:
def __init__ (자신, 어떻게, 누구):
self.how = 어떻게
self.who = 누구
self.ndx = -1
def __iter__ (자체):
자기 자신을 돌려보내다
def 다음 (자기):
self.ndx += 1
self.ndx == len(self.who)인 경우:
StopIteration 높이기
반환( self.how, self.who[self.ndx] )
반환 생산자(방법, [ "World", "사설 토토 사이트", "PL/Python" ])
$$ 언어 plpythonu;
수율)CREATE FUNCTION 인사(텍스트 방법)
RETURN SETOF 인사말
AS $$
[ "World", "사설 토토 사이트", "PL/Python" ]에서 누구를 위해:
산출물(어떻게, 누가)
$$ 언어 plpythonu;
설정 반환 함수OUT매개변수(사용SETOF 레코드 반환)도 지원됩니다. 예를 들어:
CREATE FUNCTION multiout_simple_setof(n 정수, OUT 정수, OUT 정수) SETOF 레코드 AS $$를 반환합니다. 반환 [(1, 2)] * n $$ 언어 plpythonu; SELECT * FROM multiout_simple_setof(3);
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.