콘텐츠로 이동

pydantic 2를 기반으로 0.20.0로 마이그레이션합니다. XX

버전 0.20.0는 Pydantic v2에 대한 지원을 제공합니다. XX는 개발자에게 상당한 속도 향상(검증 및 직렬화는 Rust로 작성됨) 및 청정 API를 제공하는 동시에 Pydantic v.1에 대한 지원을 중단합니다. XX의 지원 ormar는 Pydantic의 변경 사항에 해당하는 인터페이스에 변경 사항이 있습니다.

주요 변경 사항

버전 > = 0.20.0로 마이그레이션하려면 몇 가지 변경 사항이 필요합니다.

오마르, 모델 구성

이제 각 ormar 모델에는 메타 클래스를 정의하는 대신 OrmarConfig 클래스의 인스턴스인 ormar_config 매개 변수가 필요합니다. 속성의 이름은 ormar_config이고 config 클래스의 인스턴스여야 합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
데이터베이스 가져오기
오마르 가져오기
sqlalchemy 가져오기

데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite")
메타데이터 = sqlalchemy. 메타데이터()

# ormar <0.20
클래스 앨범(ormar. 모델):
    클래스 메타:
        데이터베이스 = 데이터베이스
        메타데이터 = 메타데이터
        테이블 이름 = "앨범"


    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)
    즐겨찾기: bool = ormar. 부울(기본값 = 거짓)

# ormar > = 0.20
클래스 앨범 V20(ormar. 모델):
    ormar_config = ormar. OrmarConfig (
        데이터베이스 = 데이터베이스,
        메타데이터 = 메타데이터,
        테이블 이름 = "s_v20"
    )

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)
    즐겨찾기: bool = ormar. 부울(기본값 = 거짓)

OrmarConfig api/매개 변수

Ormar_config는 메타 클래스에서 제공하는 동일한 설정 집합을 표시합니다. 즉, 다음 매개 변수 중 하나로 구성을 초기화할 수 있습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
메타데이터: 옵션 [sqlalchemy. 메타데이터]
데이터베이스: 옵션 [데이터베이스. 데이터베이스]
엔진: 옵션 [sqlalChemy.. 엔진]
테이블 이름: 옵션 [str]
order_by: 옵션 [목록 [str]]
추상: 볼
__field: 옵션 [목록 [str]]
queryset_클래스: [Queryset]을 입력합니다.
추가: 추가
제약 조건: 선택 사항 [목록 [ColumnCollectionConstraint]]

BaseMeta 동등성 - 모범 사례

코드 중복을 줄이고 개발을 단순화하기 위해서는 기본 구성을 만들고 각 모델의 사본을 제공하는 것이 좋습니다. OrmarConfig는 이를 위한 편리한 복제 방법을 제공합니다.

복사 메서드는 OrmarConfig init와 동일한 인수를 사용하므로 필요에 따라 재정의할 수 있지만 기본적으로 테이블 이름, 순서 _by 및 기본적으로 지워지는 제약 조건을 제외하고 기존 속성을 반환합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
데이터베이스 가져오기
오마르 가져오기
sqlalchemy 가져오기

base_ormar_config = ormar. OrmarConfig (
    데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite"),
    메타데이터 = sqlalchemy. 메타데이터()
)

클래스 앨범 V20(ormar. 모델):
    ormar_config = base_ormar_config 사본(
        테이블 이름 = "s_v20"
    )

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)


클래스 트랙 V20(ormar. 모델):
    ormar_config = base_ormar_config 사본(
        테이블 이름 = "_v20"
    )

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)

옵션 필드 매개변수는 더 이상 지원되지 않습니다.

버전 0.20 이전에 기존 ormar 필드에 옵션 인수를 제공하여 허용 가능한 값을 제한할 수 있습니다. 이 기능은 제거되었으며 ormar를 사용해야 합니다. 이를 위해 설계된 열거형 필드. 데이터베이스 필드 유형(즉, 정수 필드)을 보존하려면 언제든지 사용자 지정 검증기를 작성할 수 있습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
데이터베이스 가져오기
오마르 가져오기
sqlalchemy 가져오기

데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite")
메타데이터 = sqlalchemy. 메타데이터()

# ormar <0.20
클래스 아티스트(ormar. 모델):
    클래스 메타:
        데이터베이스 = 데이터베이스
        메타데이터 = 메타데이터


    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)
    국가: str = ormar. 문자열(기본값 = 거짓, max_long = 50, 선택 = ["영국", "미국", "베트남", "콜롬비아"])

# ormar > = 0.20
열거형에서 열거형 가져오기

클래스 국가(str, Enum):
    영국 = "영국"
    미국 = "미국"
    베트남 = "베트남"
    콜롬비아 = "콜롬비아"

클래스 아티스트 V20(ormar. 모델):
    ormar_config = ormar. OrmarConfig (
        데이터베이스 = 데이터베이스,
        메타데이터 = 메타데이터,
        테이블 이름 = "arts_v20"
    )

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)
    국가: 국가 = ormar. 에넘(enum_클래스 = 국가)

Pydantic_만 더 이상 필드 매개 변수를 지원하지 않습니다.

pydantic_ 전용 필드는 v 0.20에서 더 이상 사용되지 않고 제거되었습니다. Ormar를 사용하면 pydantic 필드를 일반 pydantic 모델처럼 정의할 수 있습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
데이터베이스 가져오기
오마르 가져오기
sqlalchemy 가져오기

데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite")
메타데이터 = sqlalchemy. 메타데이터()

# ormar <0.20
클래스 접시(ormar. 모델):
    클래스 메타:
        데이터베이스 = 데이터베이스
        메타데이터 = 메타데이터
        테이블 이름 = "접시"


    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)
    요리사: str = ormar. 문자열(max_long = 40, pydantic_Only = 참, 기본값 = "sam")

# ormar > = 0.20
클래스 DishV20(ormar. 모델):
    ormar_config = ormar. OrmarConfig (
        데이터베이스 = 데이터베이스,
        메타데이터 = 메타데이터,
        테이블 이름 = "s_v20"
    )

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)
    요리사: str = "sam" # 이것은 일반 피단트 필드입니다.

더 이상 속성 _field 데코레이터를 지원하지 않습니다.

속성 _field 데코레이터는 모델의 사전/직렬화된 JSON 표현에 포함된 계산된 필드를 전달하는 방법을 제공하는 데 사용됩니다. Pydantic 2. X 버전은 이러한 가능성을 도입했으므로 이제 Pydantic 네이티브 버전으로 전환해야 합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
데이터베이스 가져오기
오마르 가져오기
sqlalchemy 가져오기
피단틱 가져오기

데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite")
메타데이터 = sqlalchemy. 메타데이터()

# ormar <0.20
클래스 직원(ormar. 모델):
    클래스 메타:
        데이터베이스 = 데이터베이스
        메타데이터 = 메타데이터


    ID: int = ormar. 정수(prial_key = 참)
    첫 번째 이름: str = ormar. 문자열(max_long = 100)
    성: str = ormar. 문자열(max_long = 100)

    @Ormar.ty_field ()
    Def full_name (자체) -> str:
        f "{self.first_name}{self.last_name}"를 반환합니다.

# ormar > = 0.20
클래스 직원 V20(ormar. 모델):
    ormar_config = ormar. OrmarConfig (
        데이터베이스 = 데이터베이스,
        메타데이터 = 메타데이터,
    )

    ID: int = ormar. 정수(prial_key = 참)
    첫 번째 이름: str = ormar. 문자열(max_long = 100)
    성: str = ormar. 문자열(max_long = 100)

    @ Pydantic ted_field ()
    Def full_name (자체) -> str:
        f "{self.first_name}{self.last_name}"를 반환합니다.

더 이상 사용되지 않는 방법

아래에 나열된 모든 방법은 사용되지 않았으며 Ormar 버전 0.30에서 제거됩니다.

Dict()가 모델이 됩니다 _dump()

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
데이터베이스 가져오기
오마르 가져오기
sqlalchemy 가져오기

데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite")
메타데이터 = sqlalchemy. 메타데이터()

클래스 앨범(ormar. 모델):
    ormar_config = ormar. OrmarConfig (
        데이터베이스 = 데이터베이스,
        메타데이터 = 메타데이터,
        테이블 이름 = "앨범"
    )

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)
    즐겨찾기: bool = ormar. 부울(기본값 = 거짓)

앨범 = 앨범 (이름 = "달의 어두운 면")

# ormar <0.20
al_dict = alum.dict ()

# ormar > = 0.20
new_al_dict = alum.model_dump ()

매개 변수는 동일하게 유지됩니다(예: 포함, 제외 등).

JSON()이 모델 _dump_json()이 됩니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
데이터베이스 가져오기
오마르 가져오기
sqlalchemy 가져오기

데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite")
메타데이터 = sqlalchemy. 메타데이터()

클래스 앨범(ormar. 모델):
    ormar_config = ormar. OrmarConfig (
        데이터베이스 = 데이터베이스,
        메타데이터 = 메타데이터,
        테이블 이름 = "앨범"
    )

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)
    즐겨찾기: bool = ormar. 부울(기본값 = 거짓)

앨범 = 앨범 (이름 = "달의 어두운 면")

# ormar <0.20
앨범_json = alum.json ()

# ormar > = 0.20
new_al_dict = album .model_dump_json ()

매개 변수는 동일하게 유지됩니다(예: 포함, 제외 등).

구성()이 모델 _ 구성()이 됩니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
데이터베이스 가져오기
오마르 가져오기
sqlalchemy 가져오기

데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite")
메타데이터 = sqlalchemy. 메타데이터()

클래스 앨범(ormar. 모델):
    ormar_config = ormar. OrmarConfig (
        데이터베이스 = 데이터베이스,
        메타데이터 = 메타데이터,
        테이블 이름 = "앨범"
    )

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)
    즐겨찾기: bool = ormar. 부울(기본값 = 거짓)

Params = {
    "이름": "달의 어두운 면",
    "즐겨찾기": 사실,
}
# ormar <0.20
앨범 = 앨범. 구성 (** params)

# ormar > = 0.20
앨범 = model_ (** params)

구조에 대해 자세히 알아보려면 Pydantic 문서를 참조하십시오.