이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.토토 결과 : 문서 : 17 : 44.6. 토토 결과 액세스버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

42.7. 데이터베이스 메이저 토토 사이트

PL/Python 언어 모듈은 자동으로 Python을 가져옵니다 호출된 모듈plpy. 기능과 이 모듈의 상수는 Python 코드에서 사용할 수 있습니다. 와 같이plpy.foo.

42.7.1. 데이터베이스 메이저 토토 사이트 기능

plpy모듈은 여러 가지 기능을 제공합니다. 메이저 토토 사이트베이스 명령을 실행하는 함수:

plpy.실행(질의 [, 최대 행])

전화 중plpy.execute쿼리 문자열 및 선택적 행 제한 인수 포함 해당 쿼리가 실행되고 결과가 반환됩니다. 결과 개체에서.

결과 개체는 목록 또는 사전을 에뮬레이트합니다. 개체. 결과 객체는 행 번호로 메이저 토토 사이트할 수 있습니다. 그리고 열 이름. 예를 들면:

rv = plpy.execute("SELECT * FROM my_table", 5)

다음에서 최대 5개의 행을 반환합니다.내_테이블. 만일내_테이블열이 있습니다my_column, 다음과 같이 액세스됩니다.

foo = rv[i]["my_column"]

반환된 행 수는 다음을 사용하여 얻을 수 있습니다. 내장len함수.

결과 객체에는 다음과 같은 추가 메소드가 있습니다:

nrows()

다음에 의해 처리된 행 수를 반환합니다. 명령. 반드시 같은 것은 아니라는 점에 유의하세요. 반환된 행 수입니다. 예를 들어,업메이저 토토 사이트트명령이 설정됩니다 이 값은 어떤 행도 메이저 토토 사이트하지 않습니다.돌아오는 중사용됩니다).

상태()

SPI_execute()메이저 토토 사이트 값.

열 이름()
콜타입()
coltypmods()

열 이름 목록, 열 목록 반환 유형 OID 및 유형별 유형 수정자 목록 각각의 열에 대해.

이 메소드는 호출될 때 예외를 발생시킵니다 생성되지 않은 명령의 결과 객체 결과 세트, 예:업메이저 토토 사이트트없이돌아오는 중또는드롭 테이블. 하지만 괜찮습니다 다음을 포함하는 결과 집합에 대해 이러한 메서드를 사용하려면 행이 없습니다.

결과 개체는 수정될 수 있습니다.

전화 걸기에 유의하세요plpy.execute전체 결과가 발생합니다. 메모리로 읽혀지도록 설정됩니다. 해당 기능은 다음과 같은 경우에만 사용하세요. 결과 집합이 상대적으로 작다. 과도한 메모리 사용 위험을 감수하고 싶지 않은 경우 큰 결과를 가져올 때는 다음을 사용하세요.plpy.cursor대신plpy.execute.

plpy.준비(질의 [, argtypes])
plpy.실행(계획 [, 인수 [, 최대 행]])

plpy.prepare준비 중 쿼리 실행 계획. 쿼리로 호출됩니다. 문자열 및 매개변수 유형 목록(있는 경우) 쿼리의 매개변수 참조입니다. 예를 들면:

plan = plpy.prepare("first_name = $1인 my_users에서 last_name 선택", ["text"])

텍스트다음 유형입니다. 당신이 전달할 변수$1. 두 번째 인수는 선택 사항입니다. 쿼리에 매개변수를 전달하고 싶지 않습니다.

문장을 준비한 후 다음의 변형을 사용합니다. 기능plpy.execute에 실행해 보세요:

rv = plpy.execute(계획, ["이름"], 5)

계획을 첫 번째 인수로 전달합니다(대신 쿼리 문자열) 및 대체할 값 목록 쿼리를 두 번째 인수로 사용합니다. 두 번째 주장은 쿼리에 매개변수가 필요하지 않은 경우 선택 사항입니다. 는 세 번째 인수는 이전과 마찬가지로 선택적 행 제한입니다.

쿼리 매개변수 및 결과 행 필드가 변환됩니다. 다음에 설명된 대로 PostgreSQL과 Python 데이터 유형 사이사설 토토 : 문서 : 9.2 : 데이터 값. 는 예외는 복합 유형이 현재 그렇지 않다는 것입니다. 지원됨: 쿼리 매개변수로 거부되며 쿼리에 나타날 때 문자열로 변환됩니다. 결과. 후자의 문제에 대한 해결 방법으로 쿼리는 때때로 복합 유형이 되도록 다시 작성될 수 있습니다. 결과는 필드가 아닌 결과 행으로 나타납니다. 결과 행. 또는 결과 문자열은 다음과 같습니다. 손으로 파싱할 수 있지만 이 접근 방식은 그렇지 않습니다. 미래에도 사용할 수 없기 때문에 권장됩니다.

PL/Python 모듈을 사용하여 계획을 준비할 때 자동으로 저장됩니다. SPI 문서 읽기 (윈 토토 : 문서 : 9.2 : 윈 토토 프로그래밍 인터페이스)에 대한 설명은 다음과 같습니다. 이것이 무엇을 의미하는지. 이를 효과적으로 활용하기 위해서는 함수 호출 전반에 걸쳐 다음 중 하나를 사용해야 합니다. 영구 저장소 사전SD또는GD(참조PostgreSQL : 문서 : 9.2 : 토토 사이트 순위 공유). 에 대한 예:

CREATE FUNCTION 사용savedplan() $$로 트리거 반환
    SD에서 "계획"인 경우:
        계획 = SD["계획"]
    그 외:
        계획 = plpy.prepare("SELECT 1")
        SD["계획"] = 계획
    # 나머지 기능
$$ 언어 plpythonu;
plpy.커서(질의)
plpy.커서(계획 [, 인수])

plpy.cursor함수 와 동일한 인수를 허용합니다.plpy.execute(행 제한 제외) 처리할 수 있는 커서 개체를 반환합니다. 더 작은 청크로 구성된 큰 결과 세트. 마찬가지로plpy.execute, 쿼리 문자열 또는 인수 목록과 함께 계획 객체는 다음과 같습니다. 사용되었습니다.

커서 개체는 다음을 제공합니다.가져오기정수를 받는 메소드 매개변수를 지정하고 결과 객체를 메이저 토토 사이트합니다. 전화할 때마다가져오기, 반환된 객체는 행의 다음 배치를 포함하며 절대 다음보다 크지 않습니다. 매개변수 값. 모든 행이 소진되면,가져오기빈 결과를 반환하기 시작합니다. 개체. 커서 객체는 또한 다음을 제공합니다.반복자 인터페이스, 다음 위치에 하나의 행을 생성합니다. 모든 행이 소진될 때까지의 시간입니다. 가져온 데이터 way는 결과 객체로 반환되지 않고 다음과 같이 반환됩니다. 사전, 각 사전은 단일에 해당 결과 행.

대규모 데이터를 처리하는 두 가지 방법의 예 테이블은 다음과 같습니다:

CREATE FUNCTION count_odd_iterator() 정수를 $$로 반환합니다.
홀수 = 0
plpy.cursor("largetable에서 num 선택")의 행에 대해:
    행['num'] % 2인 경우:
         홀수 += 1
홀수로 돌아오다
$$ 언어 plpythonu;

CREATE FUNCTION count_odd_fetch(batch_size 정수) $$로 정수를 반환합니다.
홀수 = 0
커서 = plpy.cursor("대형 테이블에서 숫자 선택")
True인 동안:
    행 = 커서.페치(batch_size)
    행이 아닌 경우:
        휴식
    행의 행의 경우:
        행['num'] % 2인 경우:
            홀수 += 1
홀수로 돌아오다
$$ 언어 plpythonu;

CREATE FUNCTION count_odd_prepared() 정수를 $$로 반환합니다.
홀수 = 0
plan = plpy.prepare("num % $1 < 0인 대형 테이블에서 num 선택", ["integer"])
행 = 목록(plpy.cursor(계획, [2]))

반환 길이(행)
$$ 언어 plpythonu;

커서는 자동으로 폐기됩니다. 하지만 원한다면 커서가 보유한 모든 리소스를 명시적으로 해제하려면 다음을 사용하세요.닫기방법. 일단 닫히면, 더 이상 커서를 가져올 수 없습니다.

팁:다음에 의해 생성된 개체를 혼동하지 마십시오.plpy.cursorDB-API 사용 에 의해 정의된 커서Python 메이저 토토 사이트베이스 API 사양. 그들은 외에는 공통점이 없다. 이름.

42.7.2. 트래핑 오류

메이저 토토 사이트베이스에 접근하는 함수에 오류가 발생할 수 있습니다. 이로 인해 중단되고 예외가 발생합니다. 둘 다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예외 클래스를 정의합니다. 각각에 대해포스트그레SQL조건, 조건 이름에서 이름을 파생합니다. 예를 들어,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오류, 안제외이를 처리하는 절은 모든 것을 포착할 것입니다. 데이터베이스 메이저 토토 사이트 오류입니다.

다른 오류를 처리하는 대체 방법 조건에 따라 다음을 잡을 수 있습니다.SPI오류예외 및 내부의 특정 오류 조건을 확인제외다음을 보고 차단sqlstate예외 속성 개체. 이 속성은를 포함하는 문자열 값입니다."SQLSTATE"오류 코드. 이 접근법 거의 동일한 기능을 제공합니다