모델 방법
!!!팁과 데이터베이스의 주요 상호 작용은 do orm과 유사하게 각 모델에서 Model.로 노출된 Query세트 개체를 통해 노출됩니다.
1 | |
각 모델 인스턴스에는 저장, 업데이트 또는 로드하는 일련의 방법이 있습니다.
사용 가능한 방법은 다음과 같습니다.
현학적인 방법
각 ormar에 유의하십시오. 모델도 pydantic입니다. BaseModel, 따라서 모든 pydantic 방법을 모델, 특히 모델 _dump() 및 모델 _dump_json() 메서드에서도 사용할 수 있으며, 제외, 포함 및 기타 매개 변수도 허용할 수 있습니다.
자세한 내용을 보려면 pydantic 문서를 확인하십시오.
모델_구조()
모델_구조는 새 인스턴스를 구성하는 데 사용되는 __init__ 메서드와 동일한 원본입니다.
차이점은 모델 _가 유효성 검사를 건너 뛰기 때문에 데이터가 정확하고 신뢰할 수 있다는 것을 알 때 사용해야 한다는 것입니다. 구성 사용의 이점은 유효성 검사를 건너 뛰기로 인한 실행 속도입니다.
!!!pydantic.Model_ 방법과 달리 ormar 등가는 중첩 관련 모델도 처리합니다.
경고, 유효성 검사를 건너뛰기 때문에 생성자가 변환, 검사 등을 수행하지 않습니다. 따라서 데이터베이스에서 유효하고 사용할 수 있는 데이터를 제공하는 것은 귀하의 책임입니다.
1 2 3 4 | |
모델 덤프()
Model_dump는 Pydantic에서 상속된 메서드이지만 Ormar는 자체 매개 변수를 추가하고 기본값을 사용하는 데 약간의 뉘앙스가 있으므로 명확성을 위해 여기에 나열되어 있습니다.
모델 _dump는 모델 트리에서 사전으로 데이터를 내보냅니다.
모델 _dump 매개 변수 설명:
포함(또는 수정)
include: Union[Set, Dict] = None
반환된 사전에 포함할 필드 이름 또는 사전 집합입니다.
pydantic에는 인덱스별 목록에서 필드를 포함하거나 제외하는 드문 패턴이 있습니다(중첩 모델도 마찬가지입니다). 모든 하위 항목에서 필드를 제외하려면 __all__ 키를 사전에 전달해야 합니다.
pydantic의 세트에서는 중첩 모델을 제외할 수 없지만 ormar에서는 (관계형 이름에 이중 밑줄을 추가하여 사용할 수 있는 책의 범주 이름 제외)exclude={"book__category__name"} 를 제외할 수 있습니다.
Ormar는 인덱스 제외/포함을 지원하지 않으며 단순화되고 사용자 친화적인 표기법을 사용합니다.
중첩 필드를 포함하여 필드를 포함/제외하는 방법을 확인하려면 설명과 광범위한 예제가 있는 필드 섹션을 확인하십시오.
!!!실제로 ormar에서는 컬렉션에서 중첩 모델을 제외할 수 있으며 응답 _ 모델 _ 제외 및 응답 _ 모델 _ 포함의 전체 모델 트리에서 제외할 수 있습니다!
제외(또는 수정)
exclude: Union[Set, Dict] = None
반환된 사전에서 제외할 필드 이름의 모음 또는 사전입니다.
pydantic에는 인덱스별 목록에서 필드를 포함하거나 제외하는 드문 패턴이 있습니다(중첩 모델도 마찬가지입니다). 모든 하위 항목에서 필드를 제외하려면 __all__key를 사전에 전달해야 합니다.
pydantic의 세트에서는 중첩 모델을 제외할 수 없지만 ormar에서는 (관계 이름에 이중 밑줄을 추가하여, 즉 사용 중인 책의 범주 이름 제외)exclude={"book__category__name"} 를 제외할 수 있습니다.
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 | |
기본값 제외
exclude_defaults: bool = False
기본값(설정 여부에 관계없이)과 동일함을 나타내는 플래그는 반환된 사전에서 제외해야 합니다.
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 | |
제외_없음
제외_없음: 부울 = 거짓
플래그는 반환된 사전에서 없음과 동일한 필드를 제외해야 하는지 여부를 나타냅니다.
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 | |
_ 기본 _ 키 제외(ormar 전용)
exclude_primary_keys: bool = False
플래그를 참으로 설정하면 중첩 모델을 포함하여 트리의 모든 기본 키 열이 제외됩니다.
1 2 3 4 5 6 7 8 9 | |
_스루_모델 제외(ormar 전용)
exclude_through_models: bool = False
통과 모델은 각 다대다 관계에 대해 자동으로 추가되며 링크된 모델/테이블에 추가 매개 변수가 있습니다.
_스루_모델을 제외한 설정 = True는 하위 모델의 패스스루 모델을 포함하여 모든 패스스루 모델을 제외합니다.
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 38 39 40 41 | |
모델_dump_json()
모델_dump_json()의 매개 변수는 모델_dump()와 정확히 동일하므로 위의 내용을 확인하십시오.
물론 최종 결과는 사전이 아니라 JSON으로 대표되는 문자열입니다.
Get_pydantic ()
get_pydantic(include: Union[Set, Dict] = None, exclude: Union[Set, Dict] = None)
이 방법을 사용하면 모든 필드를 다시 입력하지 않고도 Ormar 모델에서 Pydantic 모델을 생성할 수 있습니다.
중첩 모델이 있는 경우 전체 Pydantic 모델 트리가 생성됩니다! 그러나 순환 참조 문제를 방지하는 방식으로.
또한 제외 항목을 전달하거나 매개 변수를 포함시켜 중첩 모델을 포함하여 원하는 필드만 유지할 수 있습니다.
즉, FastAPI에서 요청 및 응답에 대한 Pydantic 모델을 쉽게 만들 수 있습니다.
!!! 참고 가능한 제외/포함 및 제외 사전 또는 설정을 작성하는 방법에 대해 자세히 알아보려면 설명서의 필드 섹션을 방문하십시오.
주어진 ormar 모델의 예는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
간단한 호출로 Pydantic 모델을 생성할 수 있습니다.
1 | |
그러면 다음과 같은 모델이 생성됩니다.
1 2 3 | |
!!! 경고, 모듈에 같은 이름의 클래스가 여러 개 있는 것은 좋은 습관이 아니며 Fasapi 문서를 위반할 것입니다. 그렇기 때문에 ormar는 클래스 이름에 대문자 3 개를 랜덤으로 추가합니다. 위의 예에서 이것은 클래스의 이름이 실제로 카테고리 _XIP(BaseModel)임을 의미합니다.
중첩 필드를 제외하거나 포함하려면 사전 또는 이중 밑줄을 사용할 수 있습니다.
1 2 3 | |
결과 구조는 다음과 같습니다.
1 2 3 4 5 6 | |
물론 깊이 내포된 구조를 사용할 수도 있으며 Ormar는 루프를 제외한 방식으로 Pydantic 등가물을 생성합니다.
Ormar에서 관계가 양방향(및 ormar)임에도 불구하고 위의 항목 모델이 범주에 대한 참조가 없는 방법에 주목하십시오. 항목에는 범주 필드가 있습니다.)
경고: 결과 Pydantic 모델은 Pydantic.ator 데코레이터를 사용하여 정의된 Ormar 선택 검증자 및 검증자를 포함하여 원래 Ormar 모델에서 모든 필드 검증자를 상속합니다.
1 | |
루트 검증자는 모든 필드에서 작동할 수 있고 사용자는 피단틱 모델을 생성하는 동안 일부 필드를 제외할 수 있으므로 해당 검증자를 복사하는 것은 안전하지 않습니다. 필요한 경우 피단틱 모델을 생성하려면 해당 모델을 재정의/수동으로 복사해야 합니다.
로드()
기본적으로 관련 모델을 미리 입력하지 않고 테이블을 쿼리할 때 Ormar는 여전히 관련 모델을 구성하지만 pk 값으로만 채웁니다. 로드() 메서드를 호출하여 관련 모델을 로드할 수 있습니다.
다른 프로세스에 의해 모델이 변경된 경우 로드()를 사용하여 데이터베이스에서 모델을 새로 고칠 수도 있습니다.
1 2 3 4 5 6 7 | |
모두 로드 ()
load_all(follow: bool = False, exclude: Union[List, str, Set, Dict] = None) -> Model
메소드는 로드()와 유사하게 작동하지만 메소드를 호출한 모델의 모든 관계를 반복하고 데이터베이스에서 다시 로드합니다.
기본적으로 로드_all 메서드는 메서드를 호출하는 모델과 직접 관련된(한 단계 떨어진) 모델만 로드합니다.
그러나 다음 = 참 매개 변수를 지정하여 중첩된 모델을 반복하고 모두 관계 트리에 로드할 수 있습니다.
경고: 팔로우 = 트루 설정으로 반복되는 업데이트를 방지하기 위해 load_all은 방문한 모델 집합을 유지하고 방문한 모델에 중첩 로드를 수행하지 않습니다.
1 2 3 4 5 6 | |
메소드는 또한 쿼리 세트의 필드 제외 메서드와 동일하게 작동하는 선택적 제외 매개 변수를 허용합니다. 이렇게 하면 새로 고치는 관련 모델에서 필드를 제거하거나 전체 관련 모델을 건너뛸 수 있습니다.
메소드는 데이터베이스 쿼리를 수행하므로 관련 모델에서 로드() 및 모든()에 대한 중첩 호출보다 효율적입니다.
!!!팁 제외에 대해 자세히 알아보려면 _field를 제외하고 읽으십시오.
!!!경고 모든 관계는 로드_all()에서 지워지므로 일부 중첩 모델을 제외하면 호출 후 비어 있습니다.
저장()
저장() -> 셀프
QuerySet.create() 메서드를 사용하거나 모델을 일반 Pydantic 모델로 초기화한 다음 Save() 메서드를 호출하여 새 모델을 만들 수 있습니다.
기본 키가 설정되지 않았거나 모델이 데이터베이스에 없는 경우 저장()을 사용하여 모델에 대한 변경 사항을 저장할 수도 있습니다.
저장() 메서드는 모델이 데이터베이스에 있는지 여부를 확인하지 않으므로 모델을 기존 기본 키로 저장하려고 하면 선택한 데이터베이스 백엔드에서 무결성 오류가 발생합니다.
1 2 3 4 5 | |
업데이트()
update(_columns: List[str] = None, **kwargs) -> self
QuerySet.() 메서드를 사용하거나 모델 속성(필드)을 업데이트하고 업데이트() 메서드를 호출하여 모델을 업데이트할 수 있습니다.
기본 키를 설정하지 않고 모델을 업데이트하려고 하면 ModelPersistenceError 예외가 발생합니다.
새로 만든 모델을 유지하려면 저장() 또는 up(**kwargs) 방법을 사용하십시오.
1 2 | |
모델에서 선택한 열만 데이터베이스로 업데이트하려면 _ 매개 변수로 업데이트된 열 목록을 제공하십시오.
예:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
!!!경고 업데이트()는 모델의 인스턴스를 새로 고치지 않으므로 _ 목록에서 전달한 것보다 더 많은 열을 변경하면 모델 인스턴스의 값이 데이터베이스와 다릅니다!
업데이트 삽입()
업서트(**kwargs) -> 셀프
위의 저장() 또는 업데이트(**kwargs) 메서드에 대한 프록시입니다.
기본 키가 ->로 설정되면 업데이트 방법이 호출됩니다.
pk가 설정되지 않은 경우 저장() 메서드가 호출됩니다.
1 2 3 4 5 | |
삭제()
QuerySet.delet() 메서드를 사용하거나 모델을 사용하고 delet() 메서드를 호출하여 모델을 삭제할 수 있습니다.
1 2 | |
!!!추적 개체는 변경되지 않고 데이터베이스의 레코드만 삭제됩니다.
관련 저장 ()
save_related(follow: bool = False, save_all: bool = False, exclude=Optional[Union[Set, Dict]]) -> None
메소드는 메소드를 호출하고 저장되지 않은 각 모델에서 up() 메서드를 호출하는 모델의 모든 관계를 반복합니다.
모델이 저장되는 시기를 확인하려면 위의 상태 저장 섹션을 확인하십시오.
기본적으로 저장_lated 메서드는 메서드를 호출한 모델과 직접 관련된(한 단계 떨어진) 모델만 저장합니다.
그러나 다음 = 참 매개 변수를 지정하여 중첩된 모델을 반복하고 모두 관계 트리에 저장할 수 있습니다.
기본적으로 저장_lated는 저장되지 않은 모델만 저장하므로 현재 범위에서 수정됩니다.
모든 관련 메서드를 강제로 저장하려면 저장 상태에 관계없이 모든 관련 모델을 업데이트하는 저장 _all = True 플래그를 사용하십시오.
특정 관계 저장을 건너뛰려면 제외 매개 변수를 전달할 수 있습니다.
제외는 자체 모델 관계 집합이거나 중첩 항목을 포함할 수 있는 사전일 수 있습니다.
!!!저장_lated의 제외 매개 변수는 관계형 필드 이름만 허용하므로 다른 필드를 전달하면 어쨌든 저장됩니다.
!!!참고 제외에 전달될 수 있는 값의 구조에 대해 자세히 알아보려면 Queryset.field 방법 설명서를 확인하십시오.
경고: 팔로우=트루 설정으로 반복되는 업데이트를 방지하기 위해 Save_lated는 관계형 트리의 각 분기에 방문한 모델 집합을 유지하고 방문한 모델에 대해 중첩 저장_lated를 수행하지 않습니다.
1 | |
저장 _all = True 및 팔로우 = True를 사용하면 저장 _lated()를 사용하여 전체 트리를 한 번에 저장할 수 있습니다.
예:
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | |
경고 저장_lated()는 모든 관계와 모든 모델에 대해 반복되고 하나씩 업데이트되므로 모든 모델을 저장하지만 데이터베이스 쿼리 수 측면에서 최적이 아닐 수 있습니다.