Pydantic 초보자 가이드
데이터를 구문 분석하고 유효성을 검사하는 Python 패키지
오늘 주제는 Python 유형 힌팅을 사용한 데이터 유효성 검사 및 설정 관리입니다. 우리는 Python 패키지를 사용할 것입니다.Pydantic
런타임에 유형 힌트를 적용합니다. 사용자 친화적 인 오류를 제공하여 잘못된 데이터를 포착 할 수 있습니다. 공식 문서에 따르면 Pydantic은
“… 주로 검증 라이브러리가 아니라 구문 분석 라이브러리입니다. 검증은 목적을위한 수단입니다. 제공된 유형과 제약 조건을 준수하는 모델을 구축합니다.
즉, pydantic은 입력 데이터가 아닌 출력 모델의 유형과 제약을 보장합니다.”
이 자습서에는 세 가지 섹션이 있습니다.
- 설정
- 이행
- 결론
다음 섹션으로 이동하여 필요한 모듈 설치를 시작하겠습니다.
1. 설정
설치를 진행하기 전에 가상 환경을 만드는 것이 좋습니다.
기본 설치
터미널을 열고 다음 명령을 실행하여 설치하십시오.Pydantic
pip install pydantic
기존 패키지 업그레이드
이미 기존 패키지가 있고 업그레이드하려면 다음 명령을 실행하십시오.
pip install -U pydantic
아나콘다
Anaconda 사용자의 경우 다음과 같이 설치할 수 있습니다.
conda install pydantic -c conda-forge
선택적 종속성
Pydantic
필요에 따라 다음과 같은 선택적 종속성이 제공됩니다.
이메일 유효성 검사기
— 이메일 검증을 지원합니다.타이핑 확장
— 지원 사용정확한
Python 3.8 이전.python-dotenv
- 을지 지하다Dotenv
설정 파일.
수동으로 설치할 수 있습니다.
# install email-validator
pip install email-validator# install typing-extensions
pip install typing_extensions# install python-dotenv
pip install python-dotenv
또는 함께Pydantic
다음과 같이 :
# install email-validator
pip install pydantic[email]# install typing-extensions
pip install pydantic[typing_extensions]# install python-dotenv
pip install pydantic[dotenv]# install all dependencies
pip install pydantic[email,typing_extensions,dotenv]
2. 구현
이 섹션에서는 다음에서 사용할 수있는 몇 가지 유용한 기능을 살펴 보겠습니다.Pydantic
.
개체 정의Pydantic
에서 상속하는 새 클래스를 만드는 것만 큼 간단합니다.BaseModel
. 클래스에서 새 개체를 만들 때Pydantic
결과 모델 인스턴스의 필드가 모델에 정의 된 필드 유형을 따르도록 보장합니다.
수입
Python 파일 상단에 다음 가져 오기 선언을 추가합니다.
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel
사용자 클래스
상속하는 새 클래스를 선언하십시오.BaseModel
다음과 같이:
class User(BaseModel):
id: int
username : str
password : str
confirm_password : str
alias = 'anonymous'
timestamp: Optional[datetime] = None
friends: List[int] = []
Pydantic
기본 제공 유형 힌트 구문을 사용하여 각 변수의 데이터 유형을 결정합니다. 무대 뒤에서 일어나는 일을 하나씩 살펴 보겠습니다.
신분증
— 정수 변수는 ID를 나타냅니다. 기본값이 제공되지 않으므로이 필드는 필수이며 객체 생성 중에 지정해야합니다. 문자열, 바이트 또는 부동 소수점은 가능한 경우 정수로 강제 변환됩니다. 그렇지 않으면 예외가 발생합니다.사용자 이름
— 문자열 변수는 사용자 이름을 나타내며 필수입니다.암호
— 문자열 변수는 암호를 나타내며 필수입니다.비밀번호 확인
— 문자열 변수는 확인 암호를 나타내며 필수입니다. 나중에 데이터 유효성 검사에 사용됩니다.별명
— 문자열 변수는 별칭을 나타냅니다. 필수 사항은 아니며 객체 생성 중에 제공되지 않으면 익명으로 설정됩니다.타임 스탬프
— 필수가 아닌 날짜 / 시간 필드. 기본값은 없음입니다.Pydantic
unix timestamp int 또는 날짜 / 시간을 나타내는 문자열을 처리합니다.친구
— 정수 입력 목록입니다.
개체 인스턴스화
다음 단계는 다음에서 새 개체를 인스턴스화하는 것입니다.사용자
수업.
data = {'id': '1234', 'username': 'wai foong', 'password': 'Password123', 'confirm_password': 'Password123', 'timestamp': '2020-08-03 10:30', 'friends': [1, '2', b'3']}user = User(**data)
인쇄 할 때 다음과 같은 출력을 얻어야합니다.사용자
변하기 쉬운. 당신은 알 수 있습니다신분증
입력이 문자열 인 경우에도 자동으로 정수로 변환되었습니다. 마찬가지로 바이트는 다음과 같이 자동으로 정수로 변환됩니다.친구
들.
id=1234 username='wai foong' password='Password123' confirm_password='Password123' timestamp=datetime.datetime(2020, 8, 3, 10, 30) friends=[1, 2, 3] alias='anonymous'
BaseModel의 메소드 및 속성
상속하는 클래스BaseModel
다음과 같은 메소드와 속성이 있습니다.
dict ()
— 모델의 필드 및 값 사전을 반환합니다.json ()
— JSON 문자열 표현 사전을 반환합니다.부()
— 모델의 전체 복사본을 반환합니다.parse_obj ()
— 객체가 사전이 아닌 경우 오류 처리를 사용하여 모델에 객체를로드하는 유틸리티parse_raw ()
— 다양한 형식의 문자열을로드하는 유틸리티parse_field ()
- 비슷하다parse_raw ()
그러나 파일을 의미from_orm ()
— 임의의 클래스에서 모델로 데이터를로드합니다.개요()
— 모델을 나타내는 사전을 JSON 스키마로 반환합니다.schema_json ()
— 다음의 JSON 문자열 표현을 반환합니다.개요()
구성 ()
— 검증을 실행하지 않고 모델을 생성하기위한 클래스 메소드__fields_set__
— 모델 인스턴스가 초기화 될 때 설정된 필드 이름 세트__필드__
— 모델 필드의 사전__config__
— 모델의 구성 클래스
입력을 변경하겠습니다.신분증
다음과 같이 문자열에 :
data = {'id': 'a random string', 'username': 'wai foong', 'password': 'Password123', 'confirm_password': 'Password123', 'timestamp': '2020-08-03 10:30', 'friends': [1, '2', b'3']}user = User(**data)
코드를 실행할 때 다음 오류가 발생해야합니다.
value is not a valid integer (type=type_error.integer)
ValidationError
오류에 대한 자세한 정보를 얻으려면 다음과 같이 try-catch 블록 안에 래핑하는 것이 좋습니다.
from pydantic import BaseModel, ValidationError# ... codes for User classdata = {'id': 'a random string', 'username': 'wai foong', 'password': 'Password123', 'confirm_password': 'Password123', 'timestamp': '2020-08-03 10:30', 'friends': [1, '2', b'3']}try:
user = User(**data)
except ValidationError as e:
print(e.json())
다음 JSON을 출력합니다.신분증
유효한 정수가 아닙니다.
[
{
"loc": [
"id"
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
필드 유형
Pydantic
Python 표준 라이브러리에서 대부분의 일반적인 유형을 지원합니다. 전체 목록은 다음과 같습니다.
- 부울
- int
- 흙손
- str
- 바이트
- 명부
- 튜플
- dict
- 세트
- 얼어 붙은
- datetime.date
- datetime.time
- datetime.datetime
- datetime.timedelta
- 타이핑.
- 타이핑 .TypeVar
- 타이핑. 유니온
- 입력합니다.
- 타이핑. 목록
- 타이핑. 튜플
- 타이핑. 딕트
- 타이핑. 세트
- 타이핑 .FrozenSet
- 타이핑. 시퀀스
- 타이핑.
- 타이핑. 유형
- 타이핑.
- 타이핑. 패턴
- ipaddress.IPv4Address
- ipaddress.IPv4Interface
- ipaddress.IPv4Network
- ipaddress.IPv6Address
- ip address.IPv6 인터페이스
- ipaddress.IPv6Network
- enum.Enum
- enum.IntEnum
- decimal.Decimal
- pathlib.Path
- uuid.UUID
- 바이트 크기
제한된 유형
다음을 통해 자신의 제한을 시행 할 수 있습니다.제한된 유형
. 다음 예를 살펴 보겠습니다.
from pydantic import (
BaseModel,
NegativeInt,
PositiveInt,
conint,
conlist,
constr
)class Model(BaseModel):
# minimum length of 2 and maximum length of 10
short_str: constr(min_length=2, max_length=10) # regex
regex_str: constr(regex=r'^apple (pie|tart|sandwich)$') # remove whitespace from string
strip_str: constr(strip_whitespace=True)
# value must be greater than 1000 and less than 1024
big_int: conint(gt=1000, lt=1024)
# value is multiple of 5
mod_int: conint(multiple_of=5)
# must be a positive integer
pos_int: PositiveInt
# must be a negative integer
neg_int: NegativeInt
# list of integers that contains 1 to 4 items
short_list: conlist(int, min_items=1, max_items=4)
엄격한 유형
검증 된 값이 해당 유형이거나 해당 유형의 하위 유형 인 경우에만 검증을 통과하는 엄격한 제한을 찾고 있다면 다음과 같은 엄격한 유형을 사용할 수 있습니다.
- StrictStr
- StrictInt
- StrictFloat
- StrictBool
다음 예는 적절한 시행 방법을 보여줍니다.StrictBool
상속 된 클래스에서.
from pydantic import BaseModel, StrictBool,class StrictBoolModel(BaseModel):
strict_bool: StrictBool
문자열'그릇된'
둘 중 하나만 허용하므로 ValidationError를 발생시킵니다.진실
또는그릇된
입력으로.
유효성 검사기
또한 다음을 사용하여 사용자 정의 유효성 검사기를 만들 수 있습니다.검증 인
상속 된 클래스 내부의 데코레이터. 다음 예를 살펴 보겠습니다.신분증
4 자리 숫자이고비밀번호 확인
일치암호
들.
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel, ValidationError, validatorclass User(BaseModel):
id: int
username : str
password : str
confirm_password : str
alias = 'anonymous'
timestamp: Optional[datetime] = None
friends: List[int] = [] @validator('id')
def id_must_be_4_digits(cls, v):
if len(str(v)) != 4:
raise ValueError('must be 4 digits')
return v @validator('confirm_password')
def passwords_match(cls, v, values, **kwargs):
if 'password' in values and v != values['password']:
raise ValueError('passwords do not match')
return v
3. 결론
오늘 배운 내용을 요약 해 보겠습니다.
데이터를 구문 분석하고 검증하는 데 도움이되는 Pydantic에 대한 자세한 설명부터 시작했습니다.
다음으로 가상 환경을 만들고 pip 또는 conda를 통해 Pydantic을 설치했습니다. 또한 사용 사례에 따라 세 가지 추가 종속성에 대한 지원도 포함됩니다.
설치가 완료되면 패키지에서 제공하는 기본 기능을 심도있게 살펴 보았습니다. 기본 구성 요소는 다음에서 상속되는 새 클래스를 만드는 것입니다.BaseModel
.
Pydantic은 Python 표준 라이브러리에서 대부분의 일반적인 데이터 유형을 지원한다는 것을 배웠습니다. 우리는제한된 유형
과엄격한 유형
사용자 지정 제한을 적용하는 데 도움이됩니다.
마지막으로, 당신은검증 인
네 자리 입력 만 허용하는 데코레이터신분증
, 그리고비밀번호 확인
일치해야합니다암호
들.
이 글을 읽어 주셔서 감사합니다. 다음 기사에서 다시 뵙기를 바랍니다!
'Data Analytics(ko)' 카테고리의 다른 글
Advanced Python: Consider These 10 Elements When You Define Python Functions -번역 (0) | 2020.10.21 |
---|---|
ROCKET: Fast and Accurate Time Series Classification -번역 (0) | 2020.10.20 |
7 Commands in Python to Make Your Life Easier -번역 (0) | 2020.10.18 |
Don’t Choose Python as Your First Programming Language -번역 (0) | 2020.10.17 |
Visual Studio Code for Data Science — the Power User’s guide -번역 (0) | 2020.10.16 |